ディレクトリリストをfindコマンドで解析できますか?

ディレクトリリストをfindコマンドで解析できますか?

${file}*.zip次のコマンドを使用して、特定のディレクトリにあるパターンを持つファイルの圧縮を繰り返し解凍したいとします。/home/A/XMLfind

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

ループを使用してディレクトリを解析しましたが、for最初のディレクトリの後に解凍は停止します。つまり、前のコードと同じことを行い、ディレクトリでのみ解凍されます/home/A/XML

caution:  not extracting; -d ignored

残りのディレクトリでは、上記のエラーが発生します。誰でも私を案内できますか?よろしくお願いします。

ベストアンサー1

そのディレクトリのリストが改行(1行に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場合は、ループを次のように変更します。bashpath=(dir1 dir2...)

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

GNUを使用している場合、すべてのファイルを同じディレクトリにマージしたくない場合は、ディレクトリごとに1つしか成功しないように、末尾に述語またはコマンドを追加する必要がfindあります。-quitfindunzipzip

オプションはオプションではなく引数の前に配置する必要があります。

おすすめ記事