如何一次重命名和移动数千个文件?

如何一次重命名和移动数千个文件?

我有很多文件想要移动到文件夹中,它们的名字是这样的dir1/dir2/dir3/name_of_file.ex,也许另一个叫做/dir4/name_of_file2.xe

有没有办法将这些文件移动到目录中dir1/dir2/dir3并将其名称更改为仅name_of_file.ex自动?

我真的不知道如何解释得更容易..但我有近 1000 个文件,名称类似于TSData\Res\Catalog\Scripts\deckfoundations.txtTSBin\Sims2.exe,我想要对这些文件执行的操作是移动到文件夹中TSData\Res\Catalog\Scripts\,然后将文件重命名为deckfoundations.txt。不知道你是否了解 PHP,但你有一个爆炸函数,你可以用字符爆炸文件的名称

$ar = end(explode("/", $filename));
print_r($ar);

会输出类似这样的内容

Array
(
   [0] => TSData\Res\Catalog\Scripts
   [1] => deckfoundations.txt
)

然后我可以使用第一行来创建文件夹(如果不存在),然后重命名完整的$文件名到第二行$ar

答案1

您可以尝试使用文件重命名工具,例如关联由...提供快子在评论中。

如果失败了,您可能需要编写一些脚本。

正如你在问题中所说,你懂 PHP,为什么不自己用 PHP 写一个解决方案呢。你建议的方法似乎很合理。

答案2

我有一个脚本用来一次性查找、重命名和移动文件。如果您愿意,您可以修改它以满足您的目的;它当前设置为随机重命名文件,但您可以设置一个模式来重命名它们。

顺便说一句,脚本将所有文件移动到当前工作目录(执行脚本的目录),但同样可以修改。显然,您必须更改位置~/Downloads并将 .jpg 扩展名替换为所需的扩展名。

我不太确定这是否正是您想要的,但它可能对您和其他任何人都有用。将其保存在您最喜欢的文本编辑器中并使其可执行。

笔记:如果您修改脚本,但保留随机重命名功能,请注意偶尔可能会发生冲突(即生成相同的数字并覆盖新文件),因为即使两个 $RANDOM 实例也能生成的新文件名数量有限。不太可能因为文件被标有两组随机数,所以会发生这种情况,但如果您的文件非常重要或关键,最好采用不同的编号系统。

#!/bin/bash
# a script to recursively find all jpgs in a specified directory, rename with a random label and transfer to pwd

find ~/Downloads -type f -iname '*.jpg' -print0 | 
while IFS= read -r -d '' f; 
do mv -- "$f" "$RANDOM-$RANDOM.jpg"; 

done

相关内容