命令行 cp 或 rsync 抓取驱动器仅寻找特定文件类型并将它们放在某处?

命令行 cp 或 rsync 抓取驱动器仅寻找特定文件类型并将它们放在某处?

是否可以使用命令行来使用类似cprsync命令来抓取硬盘以仅查找图像/视频文件?也许在将它们复制到另一个位置的过程中,在新位置保留文件夹名称/路径?

我有几个旧硬盘,我想备份其中的图片和视频,但它们分散在数千个文件夹中,如果可能的话,我更希望计算机为我完成大部分繁重的工作,但我仍在学习命令行及其令人印象深刻的功能。

答案1

您可以使用find来查找您感兴趣的文件,即:

find /mnt/hd1 -name \*.jpg

将在 /mnt/hd1 目录中查找 jpg 文件(即带有 .jpg 扩展名的文件)。如果您只想将这些文件复制到某个地方,您可以:

find /mnt/hd1 -name \*.jpg -exec cp {} /mnt/dest

这将对cp在 /mnt/dest 目录中找到的每个文件运行命令。

希望能帮助到你 :)

答案2

另一种可能性是,如果您不想将其自动化为一个脚本,则使用 find 命令创建一个 bash 脚本。然后运行 ​​bash 脚本。这样您还可以知道文件的来源。

另外,如果您怀疑您的环境中存在重复的文件名,我会稍微修改上述内容。您需要在脚本中进行一些错误检查。

您是否还想保留目录路径?

即如果文件在这里

/来源/a/b/c/d/e.jpg

您想将其复制到

/目标/a/b/c/d/e.jpg?

或者

/目标/e.jpg?

举个例子

find /source -type f -name "*.jpg" -print | awk '{"cp -p "$1" /backup/}' > copy.sh

这将仅复制到一个目录 /backup

为了保存,你可以这样做

(cd /source; find . -type f -name "*.jpg" -print | awk '{"cp -p "$1" /backup/"$1}') > copy.sh

但你需要先创建所有目录

(cd /source; find . -type d -print | awk '{print "mkdir -p /backup/"$1}' > mkdir.sh

这样做的好处是,您还可以在实际运行命令之前查看脚本并确保一切正常。我已经多次运行该命令,但结果却出乎意料:)

另外,脚本还可以记录你将要做的事情。

相关内容