我有一个名为 photos
的文件夹,其结构如下:
00001/photo.jpg
00002/photo.jpg
00003/photo.jpg
我想:
- 将文件夹中的文件(名为
photo.jpg
)重命名为父文件夹。 - 将其向上移动一个文件夹。
- 删除父文件夹。
所以 photos
文件夹应该是这样的:
00001.jpg
00002.jpg
00003.jpg
我如何在 Linux 的终端中执行此操作?
请注意。照片
中有 100000 多个这样的文件夹。
最佳答案
帖子已编辑,因为我在评论中读到您有 100000 多个这样的目录。
不要使用任何涉及 bash 通配符的方法,这会非常缓慢且效率低下。相反,从 photos
目录中使用此 find
命令:
find -regex '\./[0-9]+' -type d -exec mv -n -- {}/photo.jpg {}.jpg \; -empty -delete
我对 mv
使用了 -n
选项,这样我们就不会覆盖现有文件。如果您的 mv
版本支持它,请使用它。您还可以使用 -v
选项,这样 mv
就会变得冗长,您可以看到发生了什么:
find -regex '\./[0-9]+' -type d -exec mv -nv -- {}/photo.jpg {}.jpg \; -empty -delete
读取前面的命令为:
-regex '\./[0-9]+'
:查找当前目录中名称中只有数字的所有内容-type d
: 必须是目录-exec mv -n -- {}/photo.jpg {}.jpg\;
:将本目录下的photo.jpg
文件移动到父目录下,名称为:dirname.jpg
-empty
:如果目录现在是空的...-delete
: ...删除它。
在那之后,您可能想查看哪些目录没有被删除(因为例如,它包含的文件不仅仅是 photo.jpg
文件):
find -regex '\./[0-9]+' -type d
尽情享受吧!
关于linux - 如何在 Linux 中基于父文件夹移动和重命名文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17387721/