디렉토리의 모든 파일을 삭제해야하지만 일부 파일은 제외하십시오. 예를 들어, 파일이있는 디렉토리에 a b c ... z
, 나는 모든을 제외하고 삭제해야 u
하고 p
. 이 작업을 수행하는 쉬운 방법이 있습니까?
디렉토리의 모든 파일을 삭제해야하지만 일부 파일은 제외하십시오. 예를 들어, 파일이있는 디렉토리에 a b c ... z
, 나는 모든을 제외하고 삭제해야 u
하고 p
. 이 작업을 수행하는 쉬운 방법이 있습니까?
답변:
이 경우 내가하는 일은 입력하는 것입니다
rm *
그럼 눌러 Ctrl+ X, *을 확장 *
보이는 모든 파일 이름에.
그런 다음 목록에서 유지하려는 두 파일을 제거하고 마지막으로 명령 줄을 실행할 수 있습니다.
*
확장 된 파일 목록 이 너무 길지 않는 한 이것이 효과가 있다고 생각합니다 . :-}
Ctrl
+ Shift
+ x
+ 와 같이 작성해야한다고 생각합니다*
당신이 사용할 수있는 find
find . ! -name u ! -name p -maxdepth 1 -type f -delete
!
다음 표현을 부정하다-name
파일 이름을 지정합니다-maxdepth 1
찾기 프로세스를 지정된 디렉토리로만 만듭니다 ( find
기본적으로 디렉토리를 통과합니다)-type f
파일 만 처리합니다 (예 : 디렉토리 제외).-delete
파일을 삭제합니다그런 다음 find 맨 페이지를 보고 조건을 조정할 수 있습니다.
최신 정보
-print
대신 에 사용하여 명령을 먼저 테스트하십시오.-delete
find . ! -name u ! -name p -maxdepth 1 -type f -print
-delete
그 직후에 .
재난이 발생 한다면 (CWD의 모든 파일을 삭제할 것입니다)
find . -maxdepth 1 -type f -name '[^up]' -delete
find
가장 친한 친구입니다. 특히 글로브 할 파일이 너무 많을 때
단순한:
mv
상위 디렉토리에있는 파일 rm
, 디렉토리 및 그 mv
뒤의 파일.
rm
없이는 -r
하위 디렉토리를 제거하지 않습니다.
이 답변 과 다소 유사 하지만 특별한 옵션이 필요하지 않습니다. 다음과 같은 쉘 (예 : bash, zsh, ksh 등)이 (모호한) / bin / sh에서 지원하는 "고대"기능입니다.
rm [^up]
rm [^up]*
? 나는 비슷한 일을 자주한다.
찾기없이하기 :
ls | grep -v '(u|p)' | xargs rm
(편집 : 여기의 다른 곳에서와 같이 "u"와 "v"는 전체 정규 표현식의 일반 버전으로 사용됩니다. 분명히 너무 많은 것들과 일치하지 않도록 정규 표현식을 고정해야합니다.)
다른 사람들이 제안 했듯이이 작업을 많이 수행하려는 경우 스크립트를 원할 것입니다.
-E
또는egrep
u
또는 a를 포함하는 모든 파일을 제외합니다 .p
grep -L (u|p)' * | xargs rm
어디 -L
목록에 일치하는 항목을 포함하지 않는 파일 이름을 의미합니다.
u
하거나 p
하는 포함하는 모든 파일이 아니 u
거나를 p
. 맞아요. 다음을 사용하여 고칠 수 있습니다egrep -v '^(u|p)$'
ls | grep -v 'vuze\|progs' | xargs rm -rf
플로피 시대로 돌아가서 "Except"라는 dos 실행 파일을 사용하여 현재 디렉토리에서 일시적으로 항목을 옮기고 명령을 실행하면 다음과 같이 말할 수 있습니다.
* .txt del *. * 제외
텍스트 파일을 제외한 모든 것을 삭제합니다.
이것은 쉘 스크립트로 구현하기에는 아주 사소한 일이며 이것이 두 번 이상 수행 할 가능성이있는 경우 좋은 생각 인 것 같습니다.
find . -maxdepth 1 ! -name "u" ! -name "p" -type f -exec rm -rf {} \;
유닉스에서 u와 p를 제외한 모든 파일이 삭제됩니다.
완전 불완전 정규 표현식, posix-awk 또는 posix 확장 스타일로 임의의 복잡한 제외 패턴 (영향을받는 모든 파일 이름을 스패닝)을 지정하는 것을 선호하는 사람들에게는이 방법을 권장합니다. 그것은 제외 u
하고 p
이 예에서는 현재 디렉토리입니다. 스크립트에 유용 할 수 있습니다.
find -regextype posix-awk ! -regex './(u|p)' -print0 | xargs -0 rm -rf
-regextype
GNU 버전에서만 작동합니다
find
GNU 확장 find
명령입니다. -regextype
옵션도 마찬가지 입니다. 또한 명령은 하위 디렉토리의 파일도 삭제하지만 원래 질문은 디렉토리의 파일에 대해 명확하게 묻습니다.
다른 변형이 있습니다. 다음을 입력 할 수 있습니다.
rm -i *
또는:
rm --interactive *
따라서 rm
각 파일의 삭제를 확인하라는 메시지가 표시됩니다.
엉망이되는 간단한 방법 : * .pdf를 제외한 모든 것을 삭제한다고 가정 해 봅시다.
mkdir tmp
mv *.pdf tmp
rm *
mv tmp/* .
rm -r tmp