目录列表可以解析为查找命令吗?

目录列表可以解析为查找命令吗?

假设我想使用命令递归解压缩${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

如果该目录列表以换行符分隔(每行一个)存储在标量变量中$path(这不是一个好的变量名称,因为它在多个 shell 中很特殊,但不是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文件合并到同一目录中。

请注意,选项应放在非选项参数之前。

相关内容