Find

複製包含具有給定副檔名的文件的所有文件夾

  • December 26, 2018

在 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和命令將查找輸出修剪為僅目錄名稱並刪除重複項sortuniq最後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

引用自:https://unix.stackexchange.com/questions/425724