Можно ли проанализировать список каталогов с помощью команды поиска?

Предположим, я хочу рекурсивно распаковать файлы с шаблоном $ {file} *. zip в некотором каталоге / home / A / XML с использованием команды find

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

На данный момент я хочу проанализировать список каталогов , а не просто / home / A / XML

for dir in "${path}"; do        

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

done

I пытается использовать цикл for для анализа каталогов, но разархивирование останавливается сразу после 1-го каталога, что означает, что он делал то же самое, что и предыдущий код, только разархивировал его в каталоге / home / A / XML .

caution:  not extracting; -d ignored

Я получил указанную выше ошибку для остальных каталогов. Может ли кто-нибудь помочь мне в этом? Заранее спасибо.

0
03.03.2017, 08:58
1 ответ

Если список каталогов хранится в скалярной переменной $path (не самое удачное имя для переменной, поскольку она является специальной в нескольких оболочках, но не в bash), то вы сделаете следующее:

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

Если бы $path был массивом bash, как в path=(dir1 dir2. ...), измените цикл на

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

При использовании GNU find, вы можете добавить предикат -quit в конце команды find, чтобы разрешить только один успешный unzip на каталог, если вы не хотите, чтобы все zip файлы были объединены в один каталог.

Обратите внимание, что опции должны располагаться перед аргументами без опций.

0
28.01.2020, 04:48

Теги

Похожие вопросы