메인 파일의 일부 패키지를 삭제하고 싶은데, 파일명이 너무 깁니다( google-chrome-stable_current_i386.deb
). 그래서 나는 명령을 사용하여 ls|grep chrome|rm
파일을 grep으로 파이프하여 크롬 파일을 필터링한 다음 삭제하기로 결정했습니다. 작동하지 않아서 어떻게 해야 하는지 알고 싶습니다.
답변1
그것은 나를 거의 눈살을 찌푸리게 만들었습니다.
- 아마도 이 사실을 다시 지적하고 싶지 않을 것입니다.엽총당신의 발에. 기본적으로 모든 종류의 구문 분석이
ls
더 좋습니다.복잡하고 오류가 발생하기 쉬운이런 확립된 방법보다find [...] -exec
또는구체. - 누군가가 당신을 위해 Troll 배포판을 설치하지 않는 한 쉘은 Tab완성됩니다. 을 입력
rm google
하고 누르시면 됩니다 Tab. 즉시 완료되지 않으면 Tab다시 눌러 일치하는 파일 목록을 확인하세요. 파일 이름의 문자를 더 입력하여 완료될 때까지 범위를 좁힌 다음 명령을 실행합니다. - 관로!=매개변수. 표준 입력은바이너리 데이터 스트림명령은 비동기적으로 입력될 수 있습니다. 매개변수는 명령이 실행될 때 한 번만 명령에 전달되는 공백으로 구분된 문자열입니다. 이들은 거의 상호 교환이 불가능합니다.
답변2
당신의 생각은 정확합니다. 단지 몇 가지 세부 사항을 놓쳤을 뿐입니다. 전달된 STDIN 목록과 rm
필수 매개변수를 다루고 있으므로 xargs
.
그러므로:
ls | grep chrome | xargs rm
당신이 원하는 것을 주어야합니다.
chrome
파일을 제외한 모든 항목을 삭제하려면 -v
이 grep
명령문에 추가하면 됩니다.
이 질문에 대한 다른 답변에 따르면 이는 달성하려는 목표를 달성하기에는 좋지 않은 방법일 수 있습니다.
답변3
와일드카드 문자와 함께 find 명령을 사용할 수도 있습니다.
find . -maxdepth 1 -name '*chrome*' -delete
"-maxlength" 매개변수는 find가 현재 디렉토리에서만 작동하고 하위 디렉토리로 재귀적으로 작동하지 않도록 보장합니다.
답변4
touch 0 1 2 3 4 5 6 7 8 9
find . -name \[0-9] -ok rm {} \;
< rm ... ./0 > ? y
< rm ... ./9 > ? y
< rm ... ./8 > ? y
< rm ... ./7 > ? y
< rm ... ./6 > ? y
< rm ... ./5 > ? y
< rm ... ./4 > ? y
< rm ... ./3 > ? y
< rm ... ./2 > ? y
< rm ... ./1 > ? y
^C
... -name '*c*.deb'
귀하에게 적합한 패턴을 사용하세요.