递归列出所有包含一个或多个jpg图像文件的目录

Midahed

我试图整理我的照片,由于各种历史原因,这些照片散布在我的系统中。为了使我能够开始执行此任务,我一直在尝试使用命令行来构造包含一个或多个jpg文件的所有目录的列表。我确定我不必担心要寻找其他图像文件格式,但是我必须允许jpg以大写和小写形式出现。

我希望每个目录名称在最终列表中仅出现一次。举个例子,如果我有以下目录,每个目录包含一个或多个jpg或JP​​G文件...。

~Mike/Pictures
~Mike/Pictures/London/Olympics
~Mike/Pictures/London
~Mike/Pictures/London/Holiday
~Mike/Photos
~Mike/Family History/Swaine

我希望结果只在每个目录中列出一次-不管它可能包含多少图像文件-最好先排序然后写入文件

~Mike/Family History/Swaine
~Mike/Photos
~Mike/Pictures
~Mike/Pictures/London
~Mike/Pictures/London/Holiday
~Mike/Pictures/London/Olympics

我的命令行技能还不满足于此!我可以使用很多简单形式的单个命令,但是一旦它们变得复杂和/或必须通过管道传输,事情就会出错。

库萨兰达

假设JPEG图像文件具有后缀.jpg

find "$HOME" -type f -name '*.jpg' \
    -exec sh -c 'for d; do dirname "$d"; done' sh {} + | sort -u -o jpeg_dirs.txt

这取决于您的目录名称中没有换行符,也没有时髦的目录名称。

使用GNU find

find "$HOME" -type f -name '*.jpg' -printf '%h\n' | sort -u -o jpeg_dirs.txt

这些find命令将在您的主目录下找到所有JPEG图像,并打印找到它们的目录名称。sort -u将目录名称的列表,排序,并删除重复。结果将被写入jpeg_dirs.txt当前目录中的文件


回顾2021年初(3.3年后)的情况,我有点畏缩,因为我上面的解决方案虽然本身没有错,但还是有些倒退。它还对“好的文件名”做出了明显的假设(没有换行符)。

当您find用来搜索目录时,请不要像上面那样搜索常规文件;实际搜索目录。找到目录后,我们可以查看其中的每个目录,并查看该文件是否为匹配的文件*.jpg*.JPG易于添加的其他文件名后缀):

find "$HOME" -type d -exec bash -O nullglob -O dotglob -O extglob -c '
    for dirpath do
        set -- "$dirpath"/*.@(jpg|JPG)
        [[ "$#" -gt 0 ]] && printf "%s\n" "$dirpath"
    done' bash {} +

这将从您的主目录向下窥视每个目录,并尝试扩展每个目录中的globing模式*.@(jpg|JPG)该模式也可以写成两个单独的模式,*.jpg*.JPG匹配我们要查找的所有文件。如果一个名称匹配,我们假定这是我们要输出名称的目录。对于仅包含具有这些后缀的子目录的目录这将产生误报

运行内部bash脚本时使用的shell选项允许我们匹配隐藏的名称(dotglob),如果不匹配任何内容而不是保持未展开(nullglob),则允许通配符模式完全消失,并允许我们使用ksh-inspired扩展球形模式@(...|...)

使用zsh外壳:

typeset -U list=(~/**/*.(jpg|JPG)(.DN:h))
print -rC1 $list

这将创建一个数组变量,list其属性是仅存储唯一元素。初始化为扩展文件名遍历模式的结果。该模式匹配主目录中或主目录下的所有JPEG图像文件,并且:h末尾的会从生成的路径名中删除实​​际的文件名。.使图案只匹配常规文件,并且DN行为像dotglobnullglobbash

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从一个目录中的多个目录导入图像文件

在一个目录中列出所有文件PHP

Python:以编程方式创建一个 xml 文件,该文件以递归方式列出目录的所有内容

htaccess - 如何将所有子页面重写到一个目录,除了少数页面 - css、js、图像文件的问题也被重写

如何使用imagemagick将目录中的所有图像jpg缩小到另一个目录

如何删除.jpg图像文件中的所有行?

从目录和所有子目录获取所有文件,但不包含一个子目录

列出所有git提交,其中至少包含一个扩展名为.txt的文件

如何将所有图像文件随机排列在一个文件夹中?

在所有目录中递归创建一个文件夹“ Photo”

递归删除所有目录中除一个最新文件以外的所有文件

列出多个目录中的所有文件

PHP将所有图像文件夹从一个文件夹复制到另一个文件夹

找到一个包含我列表中所有文件的目录

如何为Exoplayer创建一个包含视频和图像文件URI的ConcatenatingMediaSource?

递归地将所有文件从一个目录复制到另一个目录,但有例外

输入多个目录,输入子目录,然后使用bash将所有文件移至一个目录

如何从一个目录加载所有图像

我们如何找到目录中包含多个字符串中的任何一个的所有文件?

如何递归列出所有文件和目录

如何递归列出所有文件和目录

如何递归列出所有隐藏的文件和目录?

使用Java递归列出目录中的所有文件

列出所有不带结点递归的文件和目录

如何递归列出C#目录中的所有文件?

递归列出目录中的所有文件(Unix)

Github GraphQL递归列出目录中的所有文件

递归列出时如何知道最后一个文件或目录?

列出文件夹中的所有目录并将它们传递给另一个脚本