【发布时间】:2014-09-13 17:23:23
【问题描述】:
然后我使用这个脚本
for line in "`cat fromDirs.txt`";
do
find "$line" -type f \( -name '*good*' -o -exec grep -F "(NODES_'TASK')" {} \; \) -exec cp {} /tmp/ \;;
done
我在文件夹/tmp 中只获得了复制它们的文件名,但我需要这个文件名包含它们所在位置的完整路径,我厌倦了尝试与 sed 打架,请帮助
所以我只需要获取每个 {} 值并将斜杠 (/) 替换为减号 (-)
我尝试了很多变种,但都不好,这段代码也不起作用
for line in "`cat fromDirs.txt`";
do
find "$line" -type f \( -name '*good*' -o -exec grep -F "(NODES_'TASK')" {} \; \) -exec cp {} /tmp/$(sed "s/\//-/g" <<< {}) \;;
done
文件 fromDirs.txt 包含
/home/orders/
/etc/bin/school/
没有输出,只是没有任何东西,也许是因为我使用 sh?我在系统上根本没有 bash
我认为问题出在 sed 中,因为它将占位符 {} 读取为文件而不是字符串,因此如果 {} = /home/orders/good.php 然后 sed 打开此文件并将所有斜杠更改为减号,但我只需要在文件名中更改斜杠所以 /home/orders/good.php -> -home-orders-good.php 然后 cp 到 /tmp/-home-orders-good.php
【问题讨论】:
-
你能提供一个示例输入文件和预期结果