논리 연산자를 사용하여 한 줄의 하나 및/또는 다른 패턴과 일치하는 모든 파일을 삭제할 수 있습니까?

논리 연산자를 사용하여 한 줄의 하나 및/또는 다른 패턴과 일치하는 모든 파일을 삭제할 수 있습니까?

.txt삭제 나 파일을 한 줄로 작성하고 싶어요..csv

내 디렉터리에는 무엇이 있나요?

tachomi$ ls
file1.csv  file1.sql  file1.txt  file2.csv  file2.sql  file2.txt

파일 만 필요한데 , or .sql같은 논리연산자를 이용해 한줄에 명령을 실행하는 방법이 없을까 궁금합니다.ANDOR

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*.csvrm -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*.csvshopt -s extglobsetopt 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에서는 Nglob 한정자를 사용하거나 setopt nullglob먼저 실행하세요.

rm -f *.(txt|csv)(N)
setopt nullglob extglob; rm -f *.@(txt|csv)

관련 정보