Bash 如何更改不同文件夹中特定文件的名称

Bash 如何更改不同文件夹中特定文件的名称,bash,Bash,我有1000个files.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

我有1000个files.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
你能告诉我你会怎么做吗?
谢谢

根据你的描述,我很乐意

for i in *; do
    mv -i -- "$i/dump.trg" "$i/dump${i}.trg"
done
或者,如果当前目录中有其他文件(或没有
dump.trg
的其他子目录):

${i%.trg}
是没有其
.trg
后缀的文件名(
foo/dump.trg
->
foo/dump


${i%/*}
是没有后缀的文件名(
foo/dump.trg
->
foo
)。实际上,它从
$i

获取目录名,根据您的描述,我只需这样做

for i in *; do
    mv -i -- "$i/dump.trg" "$i/dump${i}.trg"
done
或者,如果当前目录中有其他文件(或没有
dump.trg
的其他子目录):

${i%.trg}
是没有其
.trg
后缀的文件名(
foo/dump.trg
->
foo/dump

${i%/*}
是没有后缀的文件名(
foo/dump.trg
->
foo
)。实际上,它使用

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

使用


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

我会使用
[[-f“$I/dump.trg”]]和&mv…
另外,
for I in*/
将循环限制为仅子目录。可以使用多个斜杠:
ls-l~//.bash*
,很难看。无论如何,总比把非目录文件当作目录处理而出错要好。我会用
[[-f“$I/dump.trg”]]和&mv…
还有,
for I in*/
将循环限制在子目录。使用多个斜杠也没关系:
ls-l~//.bash*
,很难看。无论如何,总比把非目录文件当作目录处理而出错要好。
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)