이것이 무엇을 의도합니까?
ls
현재 디렉토리에 파일을 나열합니다
$(ls)
에 ls
대한 인수 로 장소의 출력을 대체rm
- 기본적
rm $(ls)
으로 현재 디렉토리의 모든 파일을 삭제하도록 설계되었습니다
이 사진에 무슨 문제가 있습니까?
ls
파일 이름에서 특수 문자를 올바르게 처리 할 수 없습니다. 유닉스 사용자는 일반적으로 다른 접근 방식을 사용하는 것이 좋습니다 . 또한 filenames 계산 에 대한 관련 질문 에서이를 보여주었습니다 . 예를 들어 :
$ 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
$
또한 Denis의 답변에서 올바르게 언급 된 것처럼 대시가있는 파일 이름은 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
$
(이 단지 파일이라고 메모를 사용해야합니다, 파이썬은 우리가뿐만 아니라 그것을 사용 할 수 있도록 파일 이름에 특수 문자와 함께 문제가되지 않습니다 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 -e 'use Cwd;my $d=cwd();opendir(DIR,$d); while ( my $f = readdir(DIR)){ unlink $f;}; closedir(DIR)'