bash – 修改xarg中的替换字符串
发布时间:2020-12-15 20:02:14 所属栏目:安全 来源:网络整理
导读:当我使用xargs有时我不需要明确使用替换字符串: find . -name "*.txt" | xargs rm -rf 在其他情况下,我想指定替换字符串,以便执行以下操作: find . -name "*.txt" | xargs -I '{}' mv '{}' /foo/'{}'.bar 上一个命令会将当前目录下的所有文本文件移动到/
当我使用xargs有时我不需要明确使用替换字符串:
find . -name "*.txt" | xargs rm -rf 在其他情况下,我想指定替换字符串,以便执行以下操作: find . -name "*.txt" | xargs -I '{}' mv '{}' /foo/'{}'.bar 上一个命令会将当前目录下的所有文本文件移动到/ foo中,并将扩展名附加到所有文件。 如果不是将一些文本附加到替换字符串,我想修改该字符串,使我可以在文件的名称和扩展名之间插入一些文本,我该怎么做?例如,假设我想做与上一个例子相同的操作,但文件应该从< name> .txt重命名/移动到/foo/u0026lt;nameu0026gt..bar.txt(而不是/ foo / < name> .txt.bar)。 更新:我设法找到一个解决方案: find . -name "*.txt" | xargs -I{} sh -c 'base=$(basename $1) ; name=${base%.*} ; ext=${base##*.} ; mv "$1" "foo/${name}.bar.${ext}"' -- {} 但我想知道是否有一个更短/更好的解决方案。
在这样的情况下,while循环将更加可读:
find . -name "*.txt" | while IFS= read -r pathname; do base=$(basename "$pathname"); name=${base%.*}; ext=${base##*.} mv "$pathname" "foo/${name}.bar.${ext}" done 请注意,您可能在不同的子目录中找到具有相同名称的文件。你确定重复的被mv覆盖吗? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Unix套接字,SOCK_SEQPACKET和SOCK_DGRAM
- 理解$watch ,$apply 和 $digest --- 理解数据绑定过程
- vim文字居中,小黑屋模式
- 两个很好的angular调试工具-——batarang(stable)和ng-insp
- powershell – 带自定义shell的Windows 10 Kiosk Modus
- Angular 4.x template syntax & common directives
- 如何开始使用bootstrap
- Bootstrap模态窗- 垂直居中 & 拖动
- shell脚本中的dat,计算器,内置变量的用法
- Bootstrap列表组、面板和响应式嵌入组件