我确实读过这篇文章如何在使用 find 时执行多个命令?。除非我误解了所提供的答案,否则我不相信它提供了我所寻求的解决方案。
我的要求是找到一组特定的文件。如果找到则创建一个目录。如果目录已成功创建则提取文件。提取后删除源文件。我该如何实现这一点?
答案1
我认为你发布的链接给出了“正确”的答案。只需生成一个 shell。如果不这样做,你的工具箱就不够大。你可以用伪代码构造一个查找命令,例如:
find /path -criteria -exec mkdir {} \; -exec extract {} \; -exec rm {} \;
由于谓词自然地通过 and 连接在一起,因此如果出现任何错误,此操作都会停止。但是,它无法让您充分控制目录的命名。它肯定会失败。
生成一个 shell 可以解决这个问题,因为您将掌握整个 shell 语言:
find /path -criteria -exec /bin/sh '
for d; do
mkdir "${d##*/}" && tar xvf "$d" && rm "$d"
done' _ {} +
请注意,此版本有副作用,即在循环的任何给定迭代中,如果出现错误,它就会生成一个 shell全部结果。如果您想在遇到任何错误时立即停止,我建议使用 -e 标志来生成 shell。