これがすでに回答されている場合は本当に申し訳ありません-私はそれを見つけることができませんでした.
私は約のディレクトリを持っています。35000 ファイル。ファイルごとに 2 つのコピーがあります。次のように、すべて順番に名前が付けられています。
0000001、0000002など
上記の例では、元のファイルの名前は 1、4、7、10 などになります。
元のファイル以外のすべてのファイルを削除するにはどうすればよいですか?
これがすでに回答されている場合は本当に申し訳ありません-私はそれを見つけることができませんでした.
私は約のディレクトリを持っています。35000 ファイル。ファイルごとに 2 つのコピーがあります。次のように、すべて順番に名前が付けられています。
0000001、0000002など
上記の例では、元のファイルの名前は 1、4、7、10 などになります。
元のファイル以外のすべてのファイルを削除するにはどうすればよいですか?
私が理解している限り、Mac端末はシェルとしてbashを使用しています。次のシェル コマンドは、必要なファイル (1、4、7、10 などを除くすべて) を削除します。
shopt -s extglob; for file in [0-9]*; do number=${file%%.ext}; number=${number##+(0)}; if ((number%3 != 1)); then rm $file; fi; done
いくつかのコメント:${file%%.ext}
特殊な bash 構文を使用してファイルから拡張子を削除し、文字列からサフィックスを削除します。ファイルに拡張子がない場合は、このコマンドを削除する必要があります。
${number##+(0)}
数値から先頭のゼロを削除します (そうしないと、数値はシェルによって 8 進数として扱われます)。これには、extglob オプションを設定する必要があります (shopt -s extglob
メイン スクリプトの前から)。
((number%3 != 1))
は、1、4、7、10 の数値にのみ当てはまります (3 で割ると余りが 1 になります)。
すべてが期待どおりであることを確認するために、これを rm で実行する前echo
ではなく、最初に使用して確認することをお勧めします。rm