A lista de diretórios pode ser analisada em um comando find?

0

Suponha que eu queira descompactar arquivos recursivamente que tenham o padrão ${file}*.zip em algum diretório /home/A/XML usando o comando find

find /home/A/XML -type f -name "${file}*.zip" -exec unzip '{}' -d /target/path \;

Por enquanto, desejo analisar uma lista de diretórios em vez de apenas /home/A/XML

for dir in "${path}"; do        

    find "${dir}" -name "${file}*\.zip" -type f -exec unzip '{}' -d "${dir}"/"${file}" \;

done

Eu tentei usar um for loop para analisar os diretórios, mas o unzip parou logo após o primeiro diretório, significando que ele fez a mesma coisa que o código anterior, ele apenas descompactou no diretório /home/A/XML .

caution:  not extracting; -d ignored

Eu recebi o erro acima para os diretórios restantes. Alguém pode por favor me orientar sobre isso? Agradecemos antecipadamente.

    
por Juliet.Y 01.03.2017 / 04:44

1 resposta

0

Se essa lista de diretórios estiver armazenada delimitada por nova linha (uma em cada linha) em uma variável escalar $path (não é um bom nome para uma variável, pois é especial em vários shells, mas não bash ), você d fazer:

IFS=$'\n' # split on newline
set -o noglob # disable glob

for dir in $path # invoke the split+glob operator ($path unquoted)
do
  find "$dir" -name "$file*.zip" -type f -exec unzip -d "$dir/$file" {} \;
done

Se $path foi uma matriz bash em vez de path=(dir1 dir2...) , altere o loop para

for dir in "${path[@]}"

Se estiver usando o GNU find , você pode adicionar um -quit no final ou o comando find para permitir apenas um unzip por diretório, a menos que você queira que todos os arquivos zip sejam mesclado no mesmo diretório.

Observe que as opções devem ser colocadas antes dos argumentos não opcionais.

    
por 03.03.2017 / 08:51

Tags