디렉토리가 아닌 Linux의 디렉토리에있는 파일 만 제거
주어진 디렉토리의 파일 만 제거하기 위해 실행할 수있는 삭제 명령
- NOT 디렉토리
- 아님 하위 디렉토리
- 이 하위 디렉토리의 파일이 아닙니다.
일부 파일에는 확장자가 없으므로 rm *.*
작동 하지 않습니다 .
이 폴더에는 수천 개의 파일이 있습니다.
어떤 충고?
find
with -type f
는 파일에만 사용할 수 -maxdepth 1
있으므로의 find
하위 디렉토리에있는 파일은 검색하지 않습니다 /path/to/directory
. rm -i
삭제할 때마다 메시지가 표시되므로 삭제를 확인하거나 거부 할 수 있습니다. 각 삭제의 확인 요청을 받고 걱정 해달라고 경우에 변경 rm -fv
( -f
대한 강제 삭제). -v
플래그는 각각의 삭제와 함께 메시지가 파일을 그냥 삭제 무슨 말을 인쇄 있도록한다.
find /path/to/directory -maxdepth 1 -type f -exec rm -iv {} \;
다음 기준을 충족해야합니다.
디렉토리가
아닙니다. 하위 디렉토리가
아닙니다. 이러한 하위 디렉토리의 파일이 아닙니다.
find PATH -maxdepth 1 -type f -delete
그러나 이것은 확인을 요청하거나 방금 삭제 한 내용을 출력하지 않습니다. 따라서 먼저 -delete 작업없이 실행하고 올바른 파일인지 확인하는 것이 가장 좋습니다.
이것은 Google 검색에서 높기 때문에 가장 간단한 대답은 다음과 같습니다.
rm $directoryPath/*
여기서 $ directoryPath는 비 우려는 디렉토리입니다. 크레딧은 cbm3384로 이동해야합니다 (어떤 이유로이 답변에 대해 부정적인 투표를 받았는데 그 이유는 무엇입니까?)
확인을 원하지 않는 경우 :
rm -f $directoryPath/*
믿지 않는다면 시도 man rm
하거나
mkdir -p 1/2/3; echo 'hello1' > 1/hello1.txt; echo 'hello2' > 1/2/hello2.txt;echo 'hello3' > 1/2/3/hello3.txt
rm 1/2/*
위는 각 폴더에 'helloX.txt'가있는 디렉터리 구조를 만듭니다 (X는 디렉터리 수준). 다른 구조를 rm 1/2/*
삭제 hello2.txt
하고 그대로 둡니다.
또한 rm */*/*
만 삭제합니다 hello2.txt
. 패턴과 일치하는 유일한 것입니다.
cakephp tmp-directory를 정리하고 디렉토리 구조를 그대로 유지하는 Makefile의 예입니다.
clean:
-rm -f tmp/*
-rm -f tmp/*/*
-rm -f tmp/*/*/*
-rm -f tmp/*/*/*/*
마이너스는 rm
"오류시 중단하지 않음"을 의미합니다 (제거되지 않은 디렉토리는 오류를 반환 함). 어떤 레벨을 저장하려면 해당 라인을 제거하십시오. 예를 들어 두 번째 rm 라인은 로그를 제거합니다.
다른 작업을 수행하는 시스템 (BSD?)이 있으면 알려주세요.
편집 : 나는 우분투 12.04, osx lion 및 sourceforge.net 셸에서 이것을 테스트했습니다. 모두 위의 설명처럼 작동합니다.
rm
기본적으로 디렉토리를 삭제하지 않습니다. 따라서 귀하의 예 에서 부모 디렉토리에 있고 모든 파일 이 있다고 가정 하면 필요한 것은 다음과 같습니다.
rm *
TL; DR :
find . -maxdepth 1 -type f -delete
기타:
큰 문제는 아니지만 위의 제안은 저에게 효과적이지 않았습니다.
find . -type f -maxdepth 1 -delete
find : 경고 : 옵션이 아닌 인수 -type 뒤에 -maxdepth 옵션을 지정했지만 옵션은 위치가 아닙니다 (-maxdepth는 이전에 지정된 테스트와 그 뒤에 지정된 테스트에 영향을 미칩니다). 다른 인수 앞에 옵션을 지정하십시오.
rm dirname/*
? 없이는 -f
강제로 삭제 -r
되지 않으며 파일뿐만 아니라 디렉토리도 재귀 및 삭제하지 않습니다.
rm -f dirname/*
각 파일에 대한 메시지를 표시하지 않고 파일 만 제거합니다. 또한 "Cannnot remove 'subdirname': Is a directory"
각 하위 디렉토리에 대해 표시됩니다 .
이를 위해 최대 깊이가 1 인 find를 사용하고 파일 목록과 함께 exec rm을 사용합니다.
find ./dir -maxdepth 1 -type f -exec rm -rf '{}' \;
편집 : 이것은 본질적으로 James가 게시 한 것과 동일하지만 이후까지 그의 게시물을 보지 못했습니다.
나를 위해 일한 것은 PERL 스크립트입니다.
perl -e 'chdir "subdirectory_name" or die; opendir D, "."; while ($n = readdir D) { unlink $n }'
Run this one level up from the directory you wish to clean: replace "subdirectory_name" with the directories name.
Worked on millions of files without killing the CPU.
ReferenceURL : https://stackoverflow.com/questions/7714900/remove-only-files-in-directory-on-linux-not-directories
'program tip' 카테고리의 다른 글
iPhone : 스레드가 주 스레드인지 확인하는 방법은 무엇입니까? (0) | 2020.12.29 |
---|---|
C # XML 주석에 '<'문자를 표시하는 방법은 무엇입니까? (0) | 2020.12.29 |
총 개수를 얻기 위해 MongoDB에서 합계를 집계하는 방법은 무엇입니까? (0) | 2020.12.29 |
try catch 블록의 "when"키워드가 if 문과 동일합니까? (0) | 2020.12.29 |
hbm2ddl을 끄는 방법? (0) | 2020.12.29 |