Co to ma robić?
ls
wyświetla listę plików w bieżącym katalogu
$(ls)
zastępuje dane wyjściowe ls
miejsc, które jako argumentrm
- Zasadniczo
rm $(ls)
ma na celu usunięcie wszystkich plików w bieżącym katalogu
Co jest nie tak z tym obrazem ?
ls
nie może poprawnie obsługiwać znaków specjalnych w nazwie pliku. Użytkownicy systemów uniksowych zazwyczaj zalecają stosowanie różnych podejść . Pokazałem to również w powiązanym pytaniu dotyczącym liczenia nazw plików . Na przykład:
$ 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
$
Ponadto, jak słusznie wspomniano w odpowiedzi Denisa, nazwę pliku z wiodącymi myślnikami można interpretować jako argument rm
po zamianie, co nie pozwala na usunięcie nazwy pliku.
Co działa
Chcesz usunąć pliki w bieżącym katalogu. Więc użyj 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
$
Możesz użyć find
polecenia. To narzędzie jest często zalecane w przypadku więcej niż tylko bieżącego katalogu - może rekurencyjnie przechodzić przez całe drzewo katalogów i operować na plikach za pośrednictwem-exec . . .{} \;
$ touch "file name"
$ find . -maxdepth 1 -mindepth 1
./file name
$ find . -maxdepth 1 -mindepth 1 -exec rm {} \;
$ ls
$
Python nie ma problemu ze znakami specjalnymi w nazwach plików, więc możemy to również zastosować (pamiętaj, że ten jest tylko dla plików, będziesz musiał użyć os.rmdir()
i os.path.isdir()
jeśli chcesz operować na katalogach):
python -c 'import os; [ os.remove(i) for i in os.listdir(".") if os.path.isfile(i) ]'
W rzeczywistości powyższe polecenie może zostać zmienione w funkcję lub alias ~/.bashrc
dla zwięzłości. Na przykład,
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) ]'
}
Byłaby to wersja Perla
perl -e 'use Cwd;my $d=cwd();opendir(DIR,$d); while ( my $f = readdir(DIR)){ unlink $f;}; closedir(DIR)'