如何更改各个文件夹中特定文件的名称

时间:2018-09-25 21:52:03

标签: bash

我有1000个.txt文件,每个文件都存储在一个文件夹中。我想为每个文件添加一个数字。

让我详细解释但更简单。

假设我有10个文件夹,它们的名称分别为 0、1、2、3,...。10 然后我在每个文件夹中都有一个文件名dump.trg。 我想为每个dump.trg添加一个数字,这样我将在文件夹0中有dump0.trg,我将在文件夹1等中有dump1.trg,等等。

我尝试使用以下方法来做到这一点,但我不能

a=0
for i in *dump.trg; do
  new=$(printf "$*.trg" "$a") 
  mv -i -- "$i" "$new"
  let a=a+1
done

能否请您告诉我您将如何进行? 谢谢

2 个答案:

答案 0 :(得分:1)

根据您的描述,我会简单地

for i in *; do
    mv -i -- "$i/dump.trg" "$i/dump${i}.trg"
done

或者,如果当前目录(或其他没有dump.trg的子目录)中还有其他文件:

for i in */dump.trg; do
    mv -i -- "$i" "${i%.trg}${i%/*}.trg"
done

${i%.trg}是不带后缀.trgfoo/dump.trg-> foo/dump)的文件名。

${i%/*}是不带后缀/...foo/dump.trg-> foo)的文件名。有效地,它从$i获取目录名称。

答案 1 :(得分:1)

使用perl-flavoured rename

mkdir {0..12}
touch {0..12}/dump.trg
rename -n 's{ ([^/]+) (/dump) (\.trg) }{$1$2$1$3}x' */dump.trg
rename(0/dump.trg, 0/dump0.trg)
rename(1/dump.trg, 1/dump1.trg)
rename(10/dump.trg, 10/dump10.trg)
rename(11/dump.trg, 11/dump11.trg)
rename(12/dump.trg, 12/dump12.trg)
rename(2/dump.trg, 2/dump2.trg)
rename(3/dump.trg, 3/dump3.trg)
rename(4/dump.trg, 4/dump4.trg)
rename(5/dump.trg, 5/dump5.trg)
rename(6/dump.trg, 6/dump6.trg)
rename(7/dump.trg, 7/dump7.trg)
rename(8/dump.trg, 8/dump8.trg)
rename(9/dump.trg, 9/dump9.trg)

删除-n选项以实际重命名文件。