在bash脚本中使用find exec时,如何随机命名文件?
当涉及到快速转换一堆文件并随机重命名它们时,我使用了一种非常简单的方法来实现for循环:在bash脚本中使用find exec时,如何随机命名文件?,bash,random,find,Bash,Random,Find,当涉及到快速转换一堆文件并随机重命名它们时,我使用了一种非常简单的方法来实现for循环: for i in *; do convert [...] $i ../output/$RANDOM.jpg; done 就这么简单。imagemagick在这里所做的细节在这里并不重要。它按预期工作。这只是关于如何处理bash的事情 现在,我的当前案例文件夹不仅包含照片,它还包含自己有其他照片的子文件夹。预期的行为是再次随机重命名所有照片,并将输出文件合并到单个文件夹中 因为我不知道如何递归循环for,所
for i in *; do convert [...] $i ../output/$RANDOM.jpg; done
就这么简单。imagemagick在这里所做的细节在这里并不重要。它按预期工作。这只是关于如何处理bash的事情
现在,我的当前案例文件夹不仅包含照片,它还包含自己有其他照片的子文件夹。预期的行为是再次随机重命名所有照片,并将输出文件合并到单个文件夹中
因为我不知道如何递归循环for,所以我在这里使用find构造
find . \( -iname "*.jpg" -or -iname "*.png" \) -exec convert [...] {} ../output/$RANDOM.jpg \;
问题是$RANDOM只被调用一次,所以在整个过程中它保持不变,图像会被一次又一次地覆盖。所以事实上,输出文件夹只处理一个图像,上一次处理的图像
因此,问题是:
如何使$RANDOM变量随每个新文件一起更改?
亲切的问候 将它放入一个循环中
find . \( -iname "*.jpg" -or -iname "*.png" \) -type f -print0 |
while read -d '' -r f
do convert [...] "$f" ../output/$RANDOM.jpg # copied mostly from your find above
done
如果文件名中从未嵌入换行符,则不需要使用-print0
和read-d'
将它放入一个循环中
find . \( -iname "*.jpg" -or -iname "*.png" \) -type f -print0 |
while read -d '' -r f
do convert [...] "$f" ../output/$RANDOM.jpg # copied mostly from your find above
done
如果文件名中从未嵌入换行符,则不需要使用
-print0
和read-d'
根本不要使用find
;只需使用globstar
选项即可
shopt -s globstar
for f in **/*.jpg **/*.png; do
convert [...] "$i" ../output/$RANDOM.jpg
done
根本不要使用
find
;只需使用globstar
选项即可
shopt -s globstar
for f in **/*.jpg **/*.png; do
convert [...] "$i" ../output/$RANDOM.jpg
done
我将使用shell循环,如其他答案中所详细说明的,但知道如何在
find-exec
命令中运行任意shell代码(如$RANDOM
)仍然很有用。您可以通过运行shell来实现这一点:
find . \( -iname "*.jpg" -or -iname "*.png" \) \
-exec bash -c 'convert [...] "$1" "../output/$RANDOM.jpg"' _ {} \;
我将使用shell循环,如其他答案中所详细说明的,但知道如何在
find-exec
命令中运行任意shell代码(如$RANDOM
)仍然很有用。您可以通过运行shell来实现这一点:
find . \( -iname "*.jpg" -or -iname "*.png" \) \
-exec bash -c 'convert [...] "$1" "../output/$RANDOM.jpg"' _ {} \;
如果调用
$RANDOM
,最多可以得到32768个唯一的文件名。您很可能会在这之前覆盖以前的文件。您可能想改用类似于tempfile
的东西。您可以执行-exec bash-c…
您是否使用了bash
的现代版本(4.0或更高版本,在过去十年左右发布)?将PNG重命名为$RANDOM.jpg
是否重要?如果调用$RANDOM
,最多可获得32768个唯一文件名。您很可能会在这之前覆盖以前的文件。您可能想使用类似于tempfile
的东西。您可以执行-exec bash-c…
您使用的是bash
(4.0或更高版本,在过去十年左右发布)的合理现代版本吗?是否将PNG重命名为$RANDOM.jpg
?