我有100个名为
谢谢你的帮助。
sub1.txt, sub2.txt,..., sub100.txt
的文件。我想将它们重命名为all1.txt, all2.txt,..., all100.txt
。在Linux(Unix)中如何实现呢?谢谢你的帮助。
sub*.txt
。由于使用了echo
,因此也可以进行干运行。一旦您对结果满意,只需删除echo
即可。#!/bin/bash
for file in sub*.txt; do
echo mv "$file" "all${file#sub}"
done
|sh
;-) - mvdsecho
,以使脚本在用户满意其结果之前变得无害。 - SiegeXrename
:rename sub all sub*.txt
rename
:rename 's/^sub/all/' sub*.txt
rename
。 - Martinfor i in `seq 1 100`; do mv sub$i.txt all$i.txt; done
或者
for i in sub*.txt; do j=`echo $i|sed -e s/sub/all/`; mv $i $j; done
for i in {1..100}
,而不是调用外部二进制文件seq
。另外,这可能只是我的一种追求完美的表现,但是在命令替换中使用$()
代替反引号,因为后者不符合POSIX标准,并且不容易嵌套使用。 - SiegeXRuby(1.9+)
ruby -e 'Dir["sub*.txt"].each {|x| File.rename(x, x.gsub(/^sub/,"all") ) }'
for F in sub*.txt ; do mv $F all${F#sub}; done
总有一种新的方法来做到这一点:
$ ls sub*.txt | tr -d "sub" | xargs -I{} mv sub{} all{}
ls
应尽量避免。请参阅 http://mywiki.wooledge.org/ParsingLs - SiegeXfind
呢? - Pablo Santa Cruztr
不进行替换。字母 s、u 或 b 将被“删除”,而不是单词 “sub”。 - kurumifind
是一个很好的替代方法,我经常与其-print0
标志一起使用,并与以NUL为分隔符的read
内置命令结合使用。此外,符合POSIX-2004标准的find
版本可以在其-exec
命令之后加上+
来使其的行为与将参数传递给xargs
完全相同。 - SiegeXtr
只会删除字符,而不是整个单词。你不希望它在文件名的其他部分删除s、u或b。 - kurumisub1.txt
、sub2txt
这样的。 - Pablo Santa Cruz