我想重命名以123_xxx.txtto 开头的文件夹中的所有文件xxx.txt.
例如,我的目录有:
123_xxx.txt
123_yyy.txt
123_zzz.txt
I want to rename all files as:
xxx.txt
yyy.txt
zzz.txt
Run Code Online (Sandbox Code Playgroud)
我在这个论坛上看到了一些有用的bash脚本,但我仍然很困惑如何将它用于我的要求.
让我们假设我使用:
for file in `find -name '123_*.txt'` ; do mv $file {?.txt} ; done
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?
Sor*_*gal 69
这样做:
find . -name '123*.txt' -type f -exec bash -c 'mv "$1" "${1/\/123_//}"' -- {} \;
Run Code Online (Sandbox Code Playgroud)
好处:
use*_*own 22
find -name "123*.txt" -exec rename 's/^123_//' {} ";"
Run Code Online (Sandbox Code Playgroud)
会做的.没有AWK,没有,没有xargs需要,但重命名,来自Perl lib的一个非常有用的命令.它并不总是包含在Linux中,但很容易从repos安装.
你可以检查'重命名'工具
例如
rename 's/^123_//' *.txt
Run Code Online (Sandbox Code Playgroud)
或者(需要gawk)
find . -name '123_*.txt'|awk '{print "mv "$0" "gensub(/\/123_(.*\.txt)$/,"/\\1","g");}'|sh
Run Code Online (Sandbox Code Playgroud)
测试:
kent$ tree
.
|-- 123_a.txt
|-- 123_b.txt
|-- 123_c.txt
|-- 123_d.txt
|-- 123_e.txt
`-- u
|-- 123_a.txt
|-- 123_b.txt
|-- 123_c.txt
|-- 123_d.txt
`-- 123_e.txt
1 directory, 10 files
kent$ find . -name '123_*.txt'|awk '{print "mv "$0" "gensub(/\/123_(.*\.txt)$/,"/\\1","g");}'|sh
kent$ tree
.
|-- a.txt
|-- b.txt
|-- c.txt
|-- d.txt
|-- e.txt
`-- u
|-- a.txt
|-- b.txt
|-- c.txt
|-- d.txt
`-- e.txt
1 directory, 10 files
Run Code Online (Sandbox Code Playgroud)
如果你想将名为foo的文件名中的字符串替换为bar,你可以在linux ubuntu中使用它,根据需要更改文件类型
find -name "*foo*.filetype" -exec rename 's/foo/bar/' {} ";"
Run Code Online (Sandbox Code Playgroud)
为了扩展Sorpigal 的答案,如果你想用 替换123_,hello_你可以使用
find . -name '123*.txt' -type f -exec bash -c 'mv "$1" "${1/\/123_/\/hello_}"' -- {} \;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53908 次 |
| 最近记录: |