使用Bash,如何遍历指定文件夹中的文件夹,查找指定文件types的所有文件,并且每次find文件时,都将文件名和完整文件path的完整文件path作为variables传递给另一个文件名Bash脚本,执行它,并继续search下一个文件?
假设一个GNU发现 (这不是不合理的),你可以使用只是找到:
find /path -type f -name '*.ext' -exec my_cool_script \{\} \;
找到就是这样。 使用xargs处理文件/目录的长列表。 此外,为了处理正确的名称与空间和这样的问题,我发现最好的find行命令是:
find ${directory} -name "${pattern}" -print0 | xargs -0 ${my_command}
诀窍是找到与xargs -0兼容的-print0:它用'\ 0'替换了endlines来正确处理空格和转义字符。 当你的文件列表太长时,使用xargs会给你一些“行太长”的信息。
你可以用–no-run-if-empty来使用xargs来处理空的列表和 – 替换来管理复杂的命令。
如果你安装了GNU Parallel http://www.gnu.org/software/parallel/,你可以这样做:
find . -name '*.ext' | parallel echo {} '`dirname {}`'
用你最喜欢的bash命令替换echo
,并用你正在查找的文件扩展名。
观看GNU Parallel的介绍视频了解更多信息: http : //www.youtube.com/watch?v = OpaiGYxkSuQ
看起来非常像功课。
find /path -type f -name "*.ext" -printf "%p:%h\n" | while IFS=: read ab do # execute your bash script here done
阅读find的更多printf选项的手册页….