如果找到 ext 則 cp 父目錄 否則 echo 找不到

如果找到 ext 則 cp 父目錄 否則 echo 找不到

到目前為止我已經想出了這個。

if ls -1 ~/Downloads/*.mkv >/dev/null 2>&1
then
        echo 1
else
        echo 0
fi

但我想做的是將找到的檔案的父目錄複製到另一個位置。

我感覺我應該使用 find 命令。

答案1

如果路徑包含空格,fede.evol 的答案將會失敗。find或的輸出ls 不應該在命令替換中使用

處理所有檔案名稱(帶換行符的路徑除外)的正確方法是:

find /somewhere -name "*.mkv" -exec dirname {} \; | uniq | \
while IFS= read -r dir; do echo cp -- "$dir" /other/; done

這樣,每個資料夾/somewhere都會被複製到/other/。請注意,尾部斜線是強制性的,否則目標將始終被覆蓋。

答案2

用於dirname FILE取得給定檔案的目錄名。例如:

find DIRECTORY -name "*.mkv" -exec dirname {} \;

將為您提供 DIRECTORY 下方帶有 MKV 的所有目錄。然後你可以通過它們uniq而不是得到雙打,然後以防複製。

例如

cp -a `find DIRECTORY -name "*.mkv" -exec dirname {} \; | uniq` DESTDIR

相關內容