到目前為止我已經想出了這個。
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