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 递归地可能会创建许多重复的图像,否则
我想使用 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 递归地可能会创建许多重复的图像,否则