これで、おそらく質問は解決したと思いますが、スイッチfind
を使用したときに表示されていないファイルがあったため、私の場合はうまくいきませんでした。-regex
そこで、を使用してこの回避策を開発しls
ました。それが誰かに役立つことを願っています。
基本的に、私にとってうまくいったのはこれでした:
ls -1 -R -i | grep -a "[^A-Za-z0-9_.':@ /-]" | while read f; do inode=$(echo "$f" | cut -d ' ' -f 1); find -inum "$inode" -delete; done
部分的に分割する:
ls -1 -R -i
これにより、現在のディレクトリの下にあるファイルが再帰的に ( -R
) リスト ( ) され、1 行に 1 ファイル ( )、各ファイルの前に inode 番号 ( ) が付けられます。結果は にパイプされます。ls
-1
-i
grep
grep -a "[^A-Za-z0-9_.':@ /-]"
-a
最終的にバイナリになる場合でも、各入力をテキスト ( ) と見なして各エントリをフィルター処理します。grep
リストで指定されたものとは異なる文字が含まれている場合、行は通過します。結果は にパイプされwhile
ます。
while read f
do
inode=$(echo "$f" | cut -d ' ' -f 1)
find -inum "$inode" -delete
done
これwhile
により、すべてのエントリが繰り返され、inode 番号が抽出され、inode が に渡されfind
ます。これにより、ファイルが削除されます。