2017-10-08 18 views
2

特定の拡張子のファイルを削除するはずのbashスクリプトを作成していますが、これらのファイルがまだ存在するかどうかをチェックすると、存在する。代わりに、 "あなたはすでにファイルを削除しました"のようなカスタムメッセージを返すようにします。特定のファイルを削除するためのBashスクリプト

#!/usr/bin/env bash 
read -p "are you sure you want to delete the files? Y/N " -n 1 -r 
echo 
if [[ $REPLY =~ ^[Yy]$ ]] 
then 
    rm *.torrent 
    rm *.zip 
    rm *.deb 
echo "all those files have been deleted............." 
fi 
+0

'find'コマンドについて知っていますか? –

+0

番号。私はまだbashを初めて使っています – mots

+1

'find -name '* .torrent' -o -name '* .zip' -o -name '* .deb' -delete'はあなたの問題を完全に回避しますが、そうでないかもしれません。指定されたタイプのファイルがない場合には報告しないため、あなたが望むものです。 –

答えて

0

あなたに利用できるいくつかの比較的エレガントなオプションがあります。

あなたのフォルダに削除するタイプのファイルがあるかどうかをチェックする関数で、rmをラップすることです。あなたはワイルドカードに一致するすべてのファイルがある場合this questionごとに、チェックするためにlsを使用することができます。

#!/usr/bin/env bash 

rm_check() { 
    if ls *."${1}" 1> /dev/null 2>&1; then 
     rm *."${1}" 
     echo "All *.${1} files have been deleted" 
    else 
     echo "No *.${1} files were found" 
    fi 
} 

read -p "are you sure you want to delete the files? Y/N " -n 1 -r 
echo 
if [[ $REPLY =~ ^[Yy]$ ]]; then 
    rm_check torrent 
    rm_check zip 
    rm_check deb 
fi 

このバージョンでは、それはすべてがあなたが当初予定の道をレイアウトしているので、いいです。

私の意見では、よりクリーンなバージョンは、あなたのパターンに合ったファイルだけを見ることになります。私はコメントで示唆したように、あなたは、単一のfindのコマンドでそれを行うことができます:

#!/usr/bin/env bash 
read -p "are you sure you want to delete the files? Y/N " -n 1 -r 
echo 
if [[ $REPLY =~ ^[Yy]$ ]]; then 
    find -name '*.torrent' -o -name '*.zip' -o -name '*.deb' -delete 
    echo "all those files have been deleted............." 
fi 

この方法は、あなたのスクリプトが非常に短くなります。この方法の唯一の可能性のある欠点は、どのファイルタイプが欠落しているかを報告しないことです。

1

あなたはこのように行うことができます:

rm *.torrent *.zip *.deb 2>/dev/null \ 
&& echo "all those files have been deleted............." \ 
|| echo "you have already removed the files" 

すべてのファイルが存在する場合に予想されるので、これは動作しますが、 及びそれらのどれもが存在しない はここにスクリプトです。

あなたが何かが存在するが、すべてではない場合は、何をするべきかについて言及しなかった。 たとえば、.torrentのファイルがありますが、.zipファイルはありません。あなたは、ファイルの種類ごと除去の終了コードを確認し し、それに基づいてレポートを作成する必要があります

ファイルの一部だけがあった(現在は削除)第三の場合、 を追加するには、 。

はここでそれを行うための一つの方法です:

rm *.torrent 2>/dev/null && t=0 || t=1 
rm *.zip 2>/dev/null && z=0 || z=1 
rm *.deb 2>/dev/null && d=0 || d=1 

case $t$z$d in 
    000) 
    echo "all those files have been deleted............." ;; 
    111) 
    echo "you have already removed the files" ;; 
    *) 
    echo "you have already removed some of the files, and now all are removed" ;; 
esac 
関連する問題