繁体   English   中英

无论文件夹深度或数量如何,复制或移动目录中的所有文件

[英]Copy or move all files in a directory regardles of folder depth or number

假设我有一个名为 Pictures 的文件夹,我想从该文件夹中移动或复制所有文件。

但是,我也想移动和收集子文件夹中的所有文件:Pictures/1.png Pictures/yolo/2.png Pictures/yolo/swag/sand/3.png Pictures/extra/fire/4。 PNG

我想将所有这些文件移动或复制到另一个文件夹,如结果,所以我得到:results/1.png results/2.png results/3.png results/4.png

只有我事先不知道图片文件夹中会有哪些子文件夹。

如何在 bash/shell 脚本中完成此操作? 我也很欣赏使其文件类型中性,以便从它们的目录中收集任何文件(不仅仅是像我的示例中那样的 .png),而且我不知道文件名是什么(我只使用了 1...4,因为我没有知道如何命名它们)。

您可以使用 cp 的recursive选项简单地copy所有文件和子目录及其内容:

cp -pr <source_path>/* <destination_path>/

但是,递归moving它们有点棘手,您需要创建子目录的tar文件并移动它们,然后untar目标路径中的 tar 文件。 由于这是一个复杂的过程,作为一种解决方法,您可以递归复制文件/目录,然后从原始路径中删除文件。

cp -pr <source_path>/* <destination_path>/ && rm -rf <source_path>/*

你可以这样做:

find /absolute/path/to/Pictures -type f -name '*.png' -exec mv -i {} /absolute/path/to/results  \;

另一种选择是使用xargs

find /absolute/path/to/Pictures -name '*.png' | xargs -I files mv files /absolute/path/to/results

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM