gpt4 book ai didi

bash - Ubuntu:重命名不同目录中的多个文件

转载 作者:行者123 更新时间:2023-12-04 18:40:16 24 4
gpt4 key购买 nike

我需要重命名此结构中的文件:

Dir1
--file1
--file2
-- ...
Dir2
--file1
--file2
-- ...
...
Dir62
--file1101
--file1102
-- ...

新名称将是 1 目录中的 1_01,1_02 和第二目录中的 2_01,2_02 等等...

有没有办法一次性完成...

目前,我正在使用:
ls | cat -n | while read n f; do mv "$f" "10_$n.png"; done

一次在 1 个目录中工作...

请问有什么更好的方法吗?

最佳答案

如果运行此命令,它将使用 GNU 并行 开始一个新的bash在每个目录中并行运行 shell,并运行 ls在每一个中独立地并行:

parallel --dry-run -k 'cd {} && ls' ::: */

样本输出
cd Dir01/ && ls
cd Dir02/ && ls
cd Dir78/ && ls

如果您删除 --dry-run它会真正做到。

所以,不要运行 ls ,现在让我们看看使用 rename每个目录中的命令。以下将重命名目录中的所有文件,并按顺序增加数字( $N ):
rename --dry-run '$_=$N' *

样本输出
'file87' would be renamed to '1'
'file88' would be renamed to '2'
'file89' would be renamed to '3'
'fred' would be renamed to '4'

上述所有表明您想要的命令是:
parallel --dry-run -k 'cd {} && rename --dry-run "s/.*/{#}_\$N/" *' ::: */

您可以按原样运行它,它只会向您展示它将要做什么,而无需实际执行任何操作。

如果您喜欢它的外观,请删除第一个 --dry-run并再次运行它,它实际上会进入每个子目录并进行重命名的试运行,再次没有实际更改任何内容。

如果您仍然喜欢该命令的外观,请在临时目录中的某处制作一份文件的小副本,然后尝试删除 --dry-run参数和s是否满足您的需求。

关于bash - Ubuntu:重命名不同目录中的多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50085724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com