CentOSとbashで動作するようにしてください:
- mp4、mkv、aviをすべて再帰的に検索します。
- そのファイルを削除し、同じ名前の空のファイルと置き換えます。
答え1
ファイルを検索するにはを使用しますfind
。ファイルを切り取るにはを使用しますtruncate
。また、xargs
呼び出しを頻繁に使用しますtruncate
。しかし、-exec
find
xargs
だから、このようなことがうまくいくはずです。 (テストされていません)
find . \( -iname '*.mkv' -o -iname '*.avi' -o -iname '*.mp4' \) -print0 | xargs -0 echo truncate -s 0
echo
正しいコマンドと正しいファイル名が出力されていることをテストして削除します。
答え2
globstar
bashオプションを使用してglob文字を有効にできます**
。
globstar
If set, the pattern ** used in a pathname expansion con‐
text will match all files and zero or more directories
and subdirectories. If the pattern is followed by a /,
only directories and subdirectories match.
これにより、**/*.mkv
名前を再帰的に検索できます.mkv
。次に、元のファイルを削除して新しいファイルを作成するとは思わないでください。元のファイルを消去するだけです。最も簡単な方法はです> file
。これにより、書き込み用のファイルが開き、すでに存在するすべての内容が上書きされます。実際には何も書かないので、空のファイルが生成されます。
これを念頭に置いて、次の例を考えてみましょう。
$ tree -h
.
├── [4.0K] dir1
│ ├── [4.0K] subdir1
│ │ ├── [ 48K] file.mp3
│ │ └── [ 53M] file.mp4
│ └── [4.0K] subdir2
│ └── [136M] file2.avi
├── [4.0K] dir2
│ ├── [399K] file.mkv
│ └── [4.0K] subdir1
│ └── [548M] file3.avi
└── [ 30M] file.avi
5 directories, 6 files
6つのファイルがあり、そのうち5つは探しているパターンと一致します(dir1/subdir1/file.mp3
変更しないでください)。指定したパターンに一致するファイルを空にするには、次のようにします。
$ shopt -s globstar
$ for f in **/*.mp4 **/*.avi **/*.mkv; do > "$f"; done
今すぐやり直すと、1つのファイルだけを除いてすべて消去されたtree
ことがわかります。mp3
$ tree -h
.
├── [4.0K] dir1
│ ├── [4.0K] subdir1
│ │ ├── [ 48K] file.mp3
│ │ └── [ 0] file.mp4
│ └── [4.0K] subdir2
│ └── [ 0] file2.avi
├── [4.0K] dir2
│ ├── [ 0] file.mkv
│ └── [4.0K] subdir1
│ └── [ 0] file3.avi
└── [ 0] file.avi
あるいは、提案されているようにctrl-alt-delorを使用することもできますが、どちらもfind
必要ありません。以下を実行してください。xargs
-print0
find . \( -name '*.mkv' -o -name '*.avi' -o -name '*.mp4' \) -exec sh -c ' > "$1"' mysh {} \;