私はTimelapseビデオを作っていますが、カメラは多くの写真を撮っています(最高時間は1pic/60secですが、1pic/hだけ必要です)。だから私は毎回60枚目の写真を残して残りのファイルを削除したいと思います。各Xファイルを削除するLinuxスクリプト
ディレクトリにこれを実現するbashスクリプトか簡単なコマンドはありますか?
私はTimelapseビデオを作っていますが、カメラは多くの写真を撮っています(最高時間は1pic/60secですが、1pic/hだけ必要です)。だから私は毎回60枚目の写真を残して残りのファイルを削除したいと思います。各Xファイルを削除するLinuxスクリプト
ディレクトリにこれを実現するbashスクリプトか簡単なコマンドはありますか?
回答:
find . -maxdepth 1 -type f -printf "%T+\t%p\n" | sort | cut -f 2 | awk 'NR % 60 != 0' | xargs -d '\n' rm -f
説明:
find . -maxdepth 1 -type f -printf "%T+\t%p\n"
- 現在のディレクトリ(. -maxdepth 1
)ですべての通常ファイル(-type f
)を見つけて、ファイルの更新時刻を出力しますファイル名はTABで区切られ、ファイルごとに1行(-printf "%T+\t%p\n"
)
sort
- 結果のリストを昇順で並べ替えます(変更時刻が行の先頭にあるため、最も古いファイルが最初に表示されます)。逆の順序で
cut -f 2
をソートする-r
を使用する - リストから修正時刻を削除し、(リストの2番目のフィールド)のみのファイル名を残し
awk 'NR % 60 != 0'
- 結果のリスト
xargs -d '\n' rm -f
- リスト
最終的な結果は、すべての60番目のファイルが削除されていないことを、現在のディレクトリ内の他のすべての通常のファイルが削除されているに残っている行ごとにrm -f
を実行します。自己責任で使用してください:)
ファイル名は何ですか、どのようにn番目のファイルを決定していますか? – 123
cminとdeleteのようなfindを使うことを考えてみましょう –