여기에 제공된 답변을 사용해 보았지만 작동하지 않는 것 같습니다. 다음은 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
-delete
xargs
옵션을 사용하는 대신 파일을 병렬로 삭제하도록 선택할 수도 있습니다 . 때로는 대용량 파일 컬렉션의 경우 이를 제거하면 전체 프로세스 속도가 빨라질 수 있지만 항상 그런 것은 아닙니다.
rm
100
호출당 최대 파일 수를 사용하여 각 코어/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_