簡體   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