shell find - 获取当前文件的文件夹名称

shell find - get folder name for current file

我想使用 exiftool 为 jpg 文件提供序列号。 这些文件包含在主目录的子目录中 我可以用什么替换 FOLDER_OF_CURRENT_FILE 来实现此目的?

找到。 -type f -name "*.jpg" -exec exiftool -SerialNumber=FOLDER_OF_CURRENT_FILE;

找到:

find . -mindepth 2 -type f \( -iname '*.jpg' -o -iname '*.jpeg' \) \
-exec sh -c '
    for path do
        dir=${path%/*}
        dir=${dir##*/}
        echo exiftool -overwrite_original -SerialNumber="${dir}" "$path"
    done' _ {} +

这是一篇干货运行。你可以运行它,查看要执行的命令行。如果看起来没问题,请将 echo 真正删除为 运行。

  • -mindepth 2必须指定,除非你想要-SerialNumber=.
  • -iname表示忽略大小写

或者,也可以完全使用 exiftool 完成此操作:

exiftool -r -overwrite_original '-SerialNumber<${directory; s=.*/==s;}' .
  • -r 用于递归
  • Exiftool 允许指定属性,并使用它们注入任意 perl 代码。因此可以使用 perl 替换来删除直到最后一个目录的所有内容。我使用 s 修饰符(第二个 s)来覆盖可能包含新行的路径。
  • 还有${directory;my @a=split m(/); $_ = $a[-1]}产生相同的结果(通过斜线分割路径到一个数组,并使用最后一个元素)
  • 这会修改所有支持的文件格式。要仅指定 jpg 文件,请将 . 替换为 -ext jpg -ext jpeg .
  • 显然,-overwrite_original 是可选的,但是 运行ning 递归地可能会创建许多重复的图像,否则