これまでのところ、私はこれを思いつきました。
if ls -1 ~/Downloads/*.mkv >/dev/null 2>&1
then
echo 1
else
echo 0
fi
しかし、私がやりたいのは、見つかったファイルの親ディレクトリを別の場所にコピーすることです。
find コマンドを使用するだけでよいような気がします。
答え1
find
fede.evolの回答は、パスに空白が含まれていると失敗します。またはの出力は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