Find
複製包含具有給定副檔名的文件的所有文件夾
在 Mac 終端中,我想找到包含至少一個具有指定副檔名的文件的所有目錄,並將它們複製到其他地方。我發現
find . -iname '*.jpg' -exec dirname {} \;
這似乎找到了所有包含*.jpg
文件的目錄,但我不確定如何複製它們。我嘗試將它與它結合起來,rsync
但無法讓它工作。最好的方法是什麼?
這是一個
bash
友好的單行,它可以將任何包含 jpg 的文件夾複製到一個名為 backup 的文件夾中,同時保持目錄結構mkdir backup; for folder in $(find . -type f -name '*.jpg' | sed -r 's|/[^/]+$||' |sort |uniq); do cp -r --parents $folder backup; done
首先它會創建一個空
backup
文件夾,然後該find
命令會在目前目錄中查找所有以 . 結尾的文件.jpg
。、sed
和命令將查找輸出修剪為僅目錄名稱並刪除重複項sort
。uniq
最後cp -r --parents
,循環複製文件夾,同時創建任何失去的文件。你可以通過像這樣
sed -r
使用-printf
標誌來解決find
mkdir backup; for folder in $(find . -type f -name '*.jpg' -printf "%h\n" |sort |uniq); do cp -r --parents $folder backup; done
如果您
find
不支持-printf
,您可以嘗試使用grep
mkdir backup; for folder in $(find . -type f -name '*.jpg' | grep -o "\(.*\)/" |sort |uniq); do cp -r --parents $folder backup; done