这个单行shell脚本无法在Mac上运行 - 任何想法如何解决?

时间:2010-03-31 07:08:27

标签: macos shell osx-snow-leopard

这个unix命令我还没有在Mac上工作 - 任何需要调整的想法:

find . | grep  '.*\(css\|js\|rjs\|rhtml\|rb\)$' | sort | while read in; do printf "\n\n####\n# FILE: %s\n####\n\n" ${in} >> onebigfile; cat "${in}" >> onebigfile; done

感谢

1 个答案:

答案 0 :(得分:2)

此命令的目的是在名为onebigfile(带分隔符)IIUC的文件中收集名称以所述(css ... rb)结尾的当前目录下的所有文件的内容。

要调试此类系列管道命令,您可以运行各个命令或单个命令组以尝试查看正在发生的事情。例如,尝试:

find .
find . | grep  '.*\(css\|js\|rjs\|rhtml\|rb\)$'
find . | grep  '.*\(css\|js\|rjs\|rhtml\|rb\)$' | sort

然后得到一行输出(例如./dir/file.css),并尝试:

echo './dir/file.css' | while read in; do echo ${in}; done
echo './dir/file.css' | while read in; do cat ${in}; done
echo './dir/file.css' | while read in; do cat ${in} >> onebigfile; done

你应该能够了解正在发生的事情。

问题可能是由于文件和目录名称包含空格。在这种情况下,解决方案是使用find -print0命令。