동일한 접두사가 있는 여러 파일 삭제(인수 목록이 너무 김)

동일한 접두사가 있는 여러 파일 삭제(인수 목록이 너무 김)

여기에 제공된 답변을 사용해 보았지만 작동하지 않는 것 같습니다. 다음은 CentOS 시스템의 이 디렉토리에서 index.php 접두사가 붙은 모든 파일을 삭제하려고 시도한 명령입니다. 처음 두 사람은 도망가는 것 같았는데 아무것도 안 했다고요?

$ find . -prune -name 'index.php.*' -exec rm {} +
$ find . -prune -name 'index*' -exec rm {} +
$ rm index.php*
-bash: /usr/bin/rm: Argument list too long

답변1

테스트 파일의 테스트 데이터 세트가 있다고 가정합니다.

$ tree
.
├── index.php
├── index.php.bar
├── index.php.foo
├── keppme.php
└── level1
    ├── index.php
    ├── index.php.l1
    ├── keepme.php
    └── level2
        ├── index.php
        ├── index.php.foo
        └── keepme.php

다음으로 시작하는 모든 index.php파일을 삭제합니다.

$ find . -type f -name 'index.php*' -delete

그러면 테스트 파일은 다음과 같습니다.

$ tree
.
├── keppme.php
└── level1
    ├── keepme.php
    └── level2
        └── keepme.php

확장 후 추가된 항목 .php(예 lindex.php.foo: )을 제거하고 다음을 유지합니다 index.php.

$ find . -type f -name 'index.php.*' -delete

그러면 테스트 데이터에 다음이 표시됩니다.

$ tree
.
├── index.php
├── keppme.php
└── level1
    ├── index.php
    ├── keepme.php
    └── level2
        ├── index.php
        └── keepme.php

-deletexargs옵션을 사용하는 대신 파일을 병렬로 삭제하도록 선택할 수도 있습니다 . 때로는 대용량 파일 컬렉션의 경우 이를 제거하면 전체 프로세스 속도가 빨라질 수 있지만 항상 그런 것은 아닙니다.

rm100호출당 최대 파일 수를 사용하여 각 코어/CPU에서 명령을 실행합니다 rm.

$ find . -type f -name 'index.php.*' -print0 | xargs -r0 -P $(nproc) -n 100 rm

답변2

index*그냥 삭제 삭제를 원하신다고 가정하겠습니다.현재의디렉토리, 이것이 당신이 사용하는 것입니다 -prune.

-prune사용 하여모두경로 이름을 찾으면 최상위 검색 경로 find로 내려가는 것을 효과적으로 차단할 수 있습니다. .따라서 어떤 find명령도 아무 작업도 수행하지 않습니다.

index*현재 디렉토리의 모든 파일(아래 파일 제외)을 삭제하려면 표준을 사용하십시오.

find . ! -path . -prune -type f -name 'index*' -exec rm {} +

또는 비표준

find . -maxdepth 1 -type f -name 'index*' -delete

아니면 그냥 쉘 루프를 실행하세요:

for name in ./index*; do rm "$name"; done

위의 쉘 루프는 다음 -type f과 같지 않습니다.find

for name in ./index*; do
   [ -f "$name" ] && [ ! -L "$name" ] && rm "$name"
done

또는 다음을 사용하여 zsh:

for name in ./index*(.N); do rm $name; done

또는

autoload -U zargs
zargs -r -- index*(.N) -- rm --

... rm가능한 한 적은 횟수로 전화를 걸었습니다.

답변3

이 경우

$ rm index.php*
-bash: /usr/bin/rm: Argument list too long

당신은 이것을 시도 할 수 있습니다

$ printf "%s\0" index.php* | xargs -0 rm

답변4

특정 이름으로 시작하는 파일을 삭제하는 명령:

a) rm -rf <file name>*   (in case it gives an error **Argument list too long** then use option b)

b) find . -type f -name '<file name>*' -delete

참고: 제 예에서는 파일 이름이 다음으로 끝납니다.sess_

관련 정보