Tente algo assim:
#! /bin/bash
# Config variable(s)
ParentFolder="~/FilingCab"
# arg processing (minimalist :)
FileToMove="$1"
# use sed to extract folder number from filename.
FolderNo=$(echo "$FileToMove" | sed -r -e 's/.*zz([0-9]+)\.pdf//')
# use find to search for subdirectories of parent folder that begin
# with the folder no followed by a '.'
TargetFolder=$(find "$ParentFolder" -maxdepth 1 -type -a -d -name "${FolderNo}.*")
NumFolders=$(echo "$TargetFolder" | wc -l)
if [ "$NumFolders" -eq 1 ] ; then
mv "$ParentFolder/$FileToMove" "$TargetFolder/"
else
echo "Error: $NumFolders beginning with "$FolderNo." found" >&2
exit 1
fi
Observe as aspas duplas em torno de todos os nomes de variáveis. É sempre a coisa certa / segura para fazer, mas no seu caso é essencial porque os nomes de arquivos e diretórios que você deu como exemplos possuem caracteres de espaço.
O -maxdepth 1
no comando find
procura apenas por subdiretórios diretos de $ ParentFolder (isto é, ignora subdiretórios de subdiretórios). Se não foi isso que você quis dizer, apenas remova essa parte. Este find
procura por subdiretórios de $ ParentFolder que começam com $ FolderNo.
Eu não tenho certeza do que você quer dizer com "se TargetFolder não for igual a não vazio", eu estou supondo que você quis dizer "é a string $ TargetFolder não vazia". Normalmente, eu verificaria se o $ TargetFolder existia e era um diretório, mas como estamos obtendo o nome do diretório de um find -type d
, ele só pode estar vazio ou em um diretório. ou talvez mais, se houver mais de um começo com "$ FolderNo".
Acho melhor verificar se obtemos um e exatamente um resultado da descoberta. Qualquer outro valor é um erro e não podemos mover o arquivo. 0 significa que nenhuma pasta correspondente foi encontrada. 2 ou mais significa mais de uma pasta começando com "$ FolderNo". foi encontrado.
A mensagem de aviso para stderr é opcional. assim é o exit 1
, mas recomendado. Ele permite que você chame esse script de outro script e verifique se ele foi bem-sucedido ou não.