여기에서는 내 디렉터리와 하위 디렉터리에서 모든 물결표 파일을 제거하고 싶습니다. 여기서 리눅스 명령을 사용하는 방법은 무엇입니까?
트리 구조:
.
|-- Block_Physical_design_checklist
| |-- Block_Physical_design_checklist.config
| |-- Block_Physical_design_checklist.html
| |-- Block_Physical_design_checklist.html~
| `-- rev6
| |-- rev6.config
| `-- rev6.html
|-- CAD_checklist
| |-- CAD_checklist.config
| |-- CAD_checklist.html
| |-- CAD_checklist.html~
| `-- rev6
| |-- rev6.config
| `-- rev6.html
|-- Formality_DCT_Vs_ICC
| |-- Formality_DCT_Vs_ICC.config
| |-- Formality_DCT_Vs_ICC.html
| |-- Formality_DCT_Vs_ICC.html~
| `-- rev6
| |-- rev6.config
| |-- rev6.html
| `-- rev6.html~
예상되는 트리 구조:
.
|-- Block_Physical_design_checklist
| |-- Block_Physical_design_checklist.config
| |-- Block_Physical_design_checklist.html
| `-- rev6
| |-- rev6.config
| `-- rev6.html
|-- CAD_checklist
| |-- CAD_checklist.config
| |-- CAD_checklist.html
| `-- rev6
| |-- rev6.config
| `-- rev6.html
|-- Formality_DCT_Vs_ICC
| |-- Formality_DCT_Vs_ICC.config
| |-- Formality_DCT_Vs_ICC.html
| `-- rev6
| |-- rev6.config
| |-- rev6.html
답변1
귀하의 접근 방식에는 find . -type f -name '*~' -exec rm -f '{}' \;
개선이 필요한 몇 가지 문제/범위가 있습니다 .
-name '*~'
;로 끝나는 파일 만 일치시킵니다 . 다음~
을 포함하는 모든 파일을 일치시키려면 다음~
을 사용하십시오.*~*
-exec rm -f '{}' \;
각 파일에 대해 생성하는rm
것은 서투르고 비효율적입니다. 대신 여러 파일을 인수로 전달할 수 있으므로 인수 사용을 트리거하지 않고도 한 번에 원하는 만큼 많은 파일을 얻을rm
수 있습니다.find ... -exec
ARG_MAX
+
-exec
이 두 가지를 합치면 다음과 같습니다.
find . -type f -name '*~*' -exec rm -f {} +
GNU가 있는 경우 find
다음을 사용할 수 있습니다 -delete
.
find . -type f -name '*~*' -delete
에서는 zsh
다음과 같이 반복적인 패턴 일치 및 삭제를 한 번에 수행할 수 있습니다.
rm -f -- **/*~*(.)
glob 수정자는 .
일반 파일에만 일치합니다.
답변2
이것이 내 대답이다.
find . -type f -name '*~' -exec rm -f '{}' \;
답변3
Bash를 사용하는 옵션 globstar
:
shopt -s globstar ; rm ./**/*~
globstar
선행 문자를 포함할 수 있는 파일 이름과 관련된 문제를 방지 **
하면서 재귀 와일드카드에 를 사용할 수 있으며 물결표로 끝나는 파일 이름과 일치합니다../
-
*~