从变量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

下一篇: Argument list too long error for rm, cp, mv commands