これは何をするつもりですか?
ls
現在のディレクトリ内のファイルをリストします
$(ls)
ls
引数としての場所の出力を置換しますrm
- 本質的に
rm $(ls)
は、現在のディレクトリ内のすべてのファイルを削除することを目的としています
この写真の何が問題になっていますか?
ls
ファイル名の特殊文字を適切に処理できません。Unixユーザーは一般に異なるアプローチを使用することを勧めました。また、ファイル名のカウントに関する関連する質問でそれを示しました。例えば:
$ touch file$'\n'name
$ ls
file?name
$ rm $(ls)
rm: cannot remove 'file': No such file or directory
rm: cannot remove 'name': No such file or directory
$
また、デニスの回答で適切に言及されているように、先頭にダッシュが付いたファイル名はrm
、置換後の引数として解釈され、ファイル名を削除する目的に反します。
動作するもの
現在のディレクトリ内のファイルを削除します。したがって、globを使用しますrm *
。
$ ls
file?name
$ rm $(ls)
rm: cannot remove 'file': No such file or directory
rm: cannot remove 'name': No such file or directory
$ rm *
$ ls
$
find
コマンドを使用できます。このツールは、現在のディレクトリ以外にも頻繁に推奨されます。ディレクトリツリー全体を再帰的に走査し、次の方法でファイルを操作できます。-exec . . .{} \;
$ touch "file name"
$ find . -maxdepth 1 -mindepth 1
./file name
$ find . -maxdepth 1 -mindepth 1 -exec rm {} \;
$ ls
$
我々は(ノートこの1つはファイルだけのためであることを、あなたが使用する必要がありますそれにも採用することができるようにPythonは、ファイル名に特殊文字の問題を持っていないos.rmdir()
とos.path.isdir()
あなたがディレクトリを操作する場合):
python -c 'import os; [ os.remove(i) for i in os.listdir(".") if os.path.isfile(i) ]'
実際、上記のコマンドは~/.bashrc
、簡潔にするために関数またはエイリアスに変換できます。例えば、
rm_stuff()
{
# Clears all files in the current working directory
python -c 'import os; [ os.remove(i) for i in os.listdir(".") if os.path.isfile(i) ]'
}
そのPerlバージョンは
perl -e 'use Cwd;my $d=cwd();opendir(DIR,$d); while ( my $f = readdir(DIR)){ unlink $f;}; closedir(DIR)'