我有很多文件想要移动到文件夹中,它们的名字是这样的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.txt
和TSBin\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
答案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