从变量1中查找``占位符{} sed并将其放入变量2中
然后我使用这个脚本
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/
有没有输出,只是没有什么haping,也许是因为我用sh? 系统上我一点都没有
我认为问题出现在sed中,因为它读取placeholder {}而不是字符串,所以如果{} = /home/orders/good.php然后sed打开此文件并将所有斜线改为减号,但我需要更改只在文件名中,所以/home/orders/good.php -> -home-orders-good.php
然后cp到/tmp/-home-orders-good.php
我想你会遇到问题,因为你双引号文件的输出。
尝试改变:
for line in "`cat fromDirs.txt`";
至:
for line in `cat fromDirs.txt`;
或更好(删除旧的和过时的背面抽搐):
for line in $(cat fromDirs.txt);
最好的(使用while来阅读文件):
#!/bin/bash
while read line
do
find "$line" -type f ( -name '*good*' -o -exec grep -F "(NODES_'TASK')" {} ; ) -exec cp {} /tmp/$(sed "s///-/g" <<< {}) ;;
done < fromDirs.txt
链接地址: http://www.djcxy.com/p/97121.html
上一篇: Find`s placeholder {} sed from variable1 and put into variable2