スクリプトを使用してファイル拡張子リストにある拡張子を持つすべてのファイルを削除するにはどうすればよいですか?このリストは、他のプログラムの実行時に生成される複数のファイルを簡単に削除する必要があるため、スクリプト自体に含める必要があります。
存在しない場合は、エラーを返さずに現在のディレクトリ(サブディレクトリなし)から特定の拡張子を持つすべてのファイルのみを削除したいと思います。
端末でスクリプトを実行したいです。拡張子は常に同じです。たとえば、他のプログラムによって生成されたいくつかの.logと.txtを削除する必要がありますが、必要はないため、コマンドライン引数は必要ありません$ myscript
。
私はbashスクリプトについて何も知りません。いくつかのテストを書いたが、うまくいかなかったので削除しました。擬似コードでは、次のようにする必要があります。
myexts = .log, .txt, .somethingelse
for ext in myexts:
if exists *.ext
delete *.ext
ilkkachuが提案したコードを試しましたが、
$ ./myscript
find: ‘’: No such file or directory
find: ‘’: No such file or directory
find: ‘’: No such file or directory
リストの拡張子を変更し、元のリストの拡張子でファイルを作成してみましたが、常にこのエラーが発生します。
答え1
Bashまたはkshがあるとします。
#!/bin/bash
extensions=(c~ h~ bak)
for e in "${extensions[@]}"; do
find . -name "*.$e" -delete
done
または、後者がない場合は-exec rm -- {} +
置き換えることができます。もちろん、削除するファイルを最初に見ずにテストを実行したい場合があります。-delete
find
-delete
上記のコマンドは、すべてのサブディレクトリのファイルを削除します。サブディレクトリではなく現在のディレクトリのファイルのみを削除するには、次のようにrm
しますfind
。
#!/bin/bash
extensions=(c~ h~ bak)
shopt -s nullglob
for e in "${extensions[@]}"; do
rm ./*."$e"
done
または単に
#!/bin/bash
shopt -s nullglob
rm -- *.c~ *.h~ *.bak
より一般的なバージョンでは、ディレクトリと拡張子をスクリプトの引数として使用します。
#!/bin/sh
dir=$1
shift
for e in "$@"; do
find "$dir" -name "*.$e" -delete
done
あなたはそれを実行するために使用することができますrmscript.sh /some/target/dir c~ h~ bak
。