use*_*690 5 linux directory bash command-line file
我有一个名为photos以下结构的文件夹:
00001/photo.jpg
00002/photo.jpg
00003/photo.jpg
Run Code Online (Sandbox Code Playgroud)
我想要:
photo.jpg)中的文件重命名为父文件夹.所以photos文件夹将是这样的:
00001.jpg
00002.jpg
00003.jpg
Run Code Online (Sandbox Code Playgroud)
我怎么能在Linux的终端中做到这一点?
注意.有100000多个这样的文件夹photos.
自从我在评论中读到你有100000多个这样的目录以来编辑的帖子.
千万不能使用涉及bash的通配的任何方法,这将是非常缓慢和低效.而是find在photos目录中使用此命令:
find -regex '\./[0-9]+' -type d -exec mv -n -- {}/photo.jpg {}.jpg \; -empty -delete
Run Code Online (Sandbox Code Playgroud)
我使用该-n选项,mv以便我们不会覆盖现有文件.如果您的版本mv支持它,请使用它.您也可以使用该-v选项,以便mv详细了解您正在发生的事情:
find -regex '\./[0-9]+' -type d -exec mv -nv -- {}/photo.jpg {}.jpg \; -empty -delete
Run Code Online (Sandbox Code Playgroud)
阅读上一个命令:
-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
Run Code Online (Sandbox Code Playgroud)
请享用!
| 归档时间: |
|
| 查看次数: |
4011 次 |
| 最近记录: |