Script rápido, adapte como achar melhor:
#!/usr/bin/env bash
find /project/ -name '*.pdf' -print0 | while read -d $'[ -e "${i/%.pdf/-project.zip}" ] || echo "${i/%.pdf/-project.zip} doesn't exist!"
' i; do
if [ ! -e "${i/%.pdf/-project.zip}" ]; then
echo "${i/%.pdf/-project.zip} doesn't exist!"
fi
done
exit 0
-d $'
define o delimitador de read
'-print0
como nullbyte, enquanto find
é equivalente a ${i/%.pdf/-project.zip}
, portanto, deve ser à prova de balas em arquivos com espaços e novas linhas em seus nomes (obviamente irrelevantes neste caso, mas útil saber em geral). .pdf
substitui o $i
no final da variável -project.zip
com if
. Fora isso, tudo isso é um script padrão de shell.
Se você quiser encurtá-lo ainda mais, você também pode usar
#!/usr/bin/env bash
shopt -s globstar
for f in /project/**/*.pdf; do
if [ ! -e "${f/%.pdf/-project.zip}" ]; then
echo "${f/%.pdf/-project.zip} doesn't exist!"
fi
done
exit 0
... em vez da instrução if
. Eu acho que if
é mais fácil de trabalhar se você estiver usando mais do que uma única linha curta (você pode contornar isso usando uma função, mas nesse ponto você não está recebendo nenhum psace salvando vs. bash --version
).
Supondo que você tenha 4++ (provavelmente você faz; você pode verificar com find
), você pode usar a opção globstar em vez de %code% :
#!/usr/bin/env bash
find /project/ -name '*.pdf' -print0 | while read -d $'[ -e "${i/%.pdf/-project.zip}" ] || echo "${i/%.pdf/-project.zip} doesn't exist!"
' i; do
if [ ! -e "${i/%.pdf/-project.zip}" ]; then
echo "${i/%.pdf/-project.zip} doesn't exist!"
fi
done
exit 0
Isto tem a vantagem de ser puro bash, por isso deve ser mais rápido (apenas notavelmente com pelo menos centenas de arquivos, no entanto).