.txt
삭제 나 파일을 한 줄로 작성하고 싶어요..csv
내 디렉터리에는 무엇이 있나요?
tachomi$ ls
file1.csv file1.sql file1.txt file2.csv file2.sql file2.txt
파일 만 필요한데 , or .sql
같은 논리연산자를 이용해 한줄에 명령을 실행하는 방법이 없을까 궁금합니다.AND
OR
tachomi$ rm *.txt AND *.csv
tachomi$ rm *.txt OR *.csv
주어진 두 패턴과 일치하는 모든 파일을 삭제하는 방법
답변1
간단히:
rm *.txt *.csv
쉘이 중괄호 확장을 지원하는 경우 다음을 수행할 수 있습니다.
rm *.{txt,csv}
답변2
*.txt
두 패턴 중 하나와 일치하는 파일, 즉 AND와 일치하는 파일 *.csv
, 즉 OR와 일치하는 파일을 일치시키려면 *.txt
두 패턴을 모두 나열하면 됩니다 *.csv
. (정량자와 논리 연산자의 중첩이 중요합니다!)
rm *.txt *.csv
두 패턴 중 하나라도 파일과 일치하지 않으면 변경되지 않은 상태로 유지되므로 이름이 또는 인 파일을 찾을 수 없다고 rm
불평 합니다 . 불만 사항을 피하는 일반적인 방법은 존재하지 않는 파일을 자동으로 무시하는 를 사용하는 것입니다.*.txt
*.csv
rm -f
rm -f *.txt *.csv
패턴 1과 패턴 2 모두와 일치하는 문자열과 일치하는 연산자가 없습니다. 이 경우 둘 다 일치하는 *.txt
문자열이 어쨌든 존재하지 않습니다 *.csv
.
ksh에서는 or와 일치하는 문자열을 패턴화 @(*.txt|*.csv)
하거나 일치시킵니다 . *.@(txt|csv)
먼저 실행하는 경우 bash에서 이 모드를 사용할 수 있고, 먼저 실행하는 경우 zsh에서 사용하거나 zsh의 기본 구문을 사용할 수 있습니다. 복합 패턴과 일치하는 파일이 없으면 그대로 명령에 전달됩니다. ATT ksh에서(mksh, bash 또는 zsh가 아닌 ATT ksh에서만) 패턴과 일치하는 파일이 없으면 빈 목록으로 확장을 사용할 수 있습니다. 누락된 인수에 대해 불평하지 않도록 여전히 사용해야 합니다.*.txt
*.csv
shopt -s extglob
setopt ksh_glob
*.(txt|csv)
~(N)*.@(txt|csv)
rm -f
rm -f ~(N)*.@(txt|csv)
Bash에서는 shopt -s nullglob
먼저 실행하여 일치하지 않는 모든 패턴을 빈 목록으로 확장합니다.
shopt -s nullglob extglob; rm -f *.@(txt|csv)
zsh에서는 N
glob 한정자를 사용하거나 setopt nullglob
먼저 실행하세요.
rm -f *.(txt|csv)(N)
setopt nullglob extglob; rm -f *.@(txt|csv)