将系统上的所有图像复制到一个文件夹中

Ada*_*dam 0 bash scripts

我正在尝试创建一个 bash 脚本,它将在系统中搜索图像jpg, jpeg, png, gif并将它们复制到新位置。但我很难弄清楚如何做到这一点。

这是我到目前为止

#!/bin/bash
STRING="Copy system images \n"
echo $STRING

# settings
$LOCATION = ~/backup/images/$(date)
$FILETYPE = jpg, jpeg, png, gif

# in PHP
# preg_replace("/[^, ]+/", "*.$0", $input_lines);
# bash?? filetype should be *.jpg, *.jpeg, *.png, *.png

# find all images defined in FILETYPE
find ~/ -type f -iname $FILETYPE > images.txt 
&& echo "Number of images loccated: " 
&& wc -l images.txt

# read every line (image path), and copy to new location.
&& while read line; do cp $line ~/backup/$line; done < images.txt
&& rm images.txt
Run Code Online (Sandbox Code Playgroud)

我知道,这可能有点矫枉过正。但是自动脚本会很棒!

如您所见,我不知道如何 sed、preg_replace $FILETYPE. 而过度使用&&似乎不对?

Joh*_*024 7

要查找在主目录中的所有文件jpgjpegpng,或gif扩展和复制他们~/backup,尝试:

cd
find . -regex '.*\(jpg\|jpeg\|png\|gif\)' \! -path './backup/*' -exec echo cp -t backup {} +
Run Code Online (Sandbox Code Playgroud)

这个怎么运作

  • cd

    这使得主目录 ,~/与当前目录相同./

  • find .

    在当前目录中查找文件

  • -regex '.*\(jpg\|jpeg\|png\|gif\)'

    结果限制为文件名称以结尾jpgjpegpng,或gif

  • \! -path './backup/*'

    忽略备份目录中已有的文件。

    请注意,虽然-regex期望正则表达式作为其参数,但 -path期望是glob。这是两种非常不同的形式,它们遵循非常不同的规则。

  • -exec echo cp -t backup {} +

    将找到的文件移动到备份目录。