我想做相当于:
for i in `ls -1`; do echo $i | mv $i `sed 's/profile/account/'`; done
与xargs
ls -1 | xargs -I{} mv {} `echo {} | sed 's/profile/account/'`
但是反引号内管道后面的 sed
会被忽略。
有谁知道为什么会这样?
编辑:更多信息
根本问题只是在直接给定的模式替换中重命名文件(此处将 profile
替换为 account
,但这可以通过对文件进行 for in
循环来解决。
我提出的问题是为什么以下内容不起作用。
ls -1 | xargs -I{} mv {} `echo {} | sed 's/profile/account/'`
为什么
`echo {} | sed 's/profile/account/'`
部分不返回替换的文件名,而是返回原始文件名。就好像 |
在反引号内不起作用。
以不同的方式写问题:
如果我有一个类似于名为 list.txt
的文件中的列表
profile1.txt
profile2.txt
并且想要生成
account1.txt
account2.txt
分别对每一行进行操作,以便我可以在其上运行命令。
cat list.txt | xargs -I{} echo `echo {} | sed 's/profile/account/'`
为什么命令返回:
profile1.txt
profile2.txt
而不是将个人资料更改为帐户?
最佳答案
这可能适合你(GNU 并行):
parallel 'old={}; new=${old/profile/account}; echo mv $old $new' ::: *
检查后删除echo
。
关于linux - xargs echo `echo {} | sed ' s/pattern/replace/'` 不起作用,但每个循环都有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52912204/