【问题标题】:this one-line shell script not working on Mac - any ideas how to fix?这个单行 shell 脚本在 Mac 上不起作用 - 有什么解决办法吗?
【发布时间】:2010-03-31 07:08:27
【问题描述】:

这个 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

谢谢

【问题讨论】:

  • 究竟是什么不工作?使用 bash 对我来说效果很好。

标签: macos shell osx-snow-leopard


【解决方案1】:

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

要调试此类管道命令系列,您可以运行单个命令或单个命令组以尝试查看发生了什么。例如,尝试:

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 命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-14
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    相关资源
    最近更新 更多