[英]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.