我有一个充满文件的目录。我想将所有与 *.py 匹配的文件重命名为 -backup.py。我怎么做。
我知道我可以在 *.py 中使用 for i,但从那里我不确定如何保留初始名称并将备份附加到所有名称。
答案1
for i in *.py
do
mv "$i" `echo "$i" | sed 's/\.py$/-backup.py/'`
done
答案2
答案3
其本质与 unxnut 的答案相同,但我认为使用 sed 来完成像剥离扩展这样简单的事情就太过分了:
for f in ./*.py; do mv "$f" "${f%.py}-backup.py"; done
${f%.py}
是变量 $f,从.py
末尾删除。您还可以使用 删除从头开始的内容${f#whatever}
。对于递归性(即在当前目录和所有子目录中工作),假设您有 bash 4+,您可以使用 globstar:
shopt -s globstar
for f in ./**/*.py; do mv "$f" "${f%.py}-backup.py"; done
或者,您可以使用 rename —— 实际上有两个不同的程序使用这个名称,您使用哪一个将取决于您对 *nix 的风格。 perl-rename(由 Debian 及其衍生版本使用,例如 Ubuntu 等):
rename 's/\.py$/-rename.py/' ./*.py
另一个重命名将使用以下语法:
rename .py -backup.py ./*.py
for
当然,循环更mv
便携:第一个非递归循环是 POSIX,因此可以在任何地方的每个 *nix 上工作,除了一些博物馆作品。