'rm files *'는 모든 하위 디렉토리에서 모든 일치 항목을 제거합니까?


13

wordpress-891.sql하위 디렉토리가 아닌 현재 디렉토리에서 보이는 파일을 제거하고 싶습니다 .

rm wordpress-*.sql트릭을하거나 또한 하위 디렉터리에서 일치를 제거 할 것인가?


1
따로, 다른 모든 대답은 정확하지만 한 가지 더 왜곡이 있습니다. 실제로 rm 명령이 아닌 bash는 와일드 카드를 확장합니다. 디렉토리에 일치하는 파일이 10 개 있으면 rm은 와일드 카드가 아닌 10 개의 개별 인수를 보게됩니다. rm이 확장을 수행하도록하려면 인수를 작은 따옴표로 묶어야합니다. rm의 경우 차이가 없지만 다른 상황에서는 달라질 수 있습니다. 일반적으로 와일드 카드가 apt-get 패키지와 같은 파일 이외의 것을 가리킬 때.
Kevin Keane

3
@KevinKeane, rm파일 이름 확장을 수행하지 않습니다 ... rm "foo*"이름에 별표가있는 파일을 제거하려고 시도합니다.
ilkkachu

답변:


20

아니요. 일반 글 로빙 *은 재귀 적이 지 않으며 둘 다 아닙니다 rm.

디렉토리 이름이 일치하면 제거되지 않습니다 -r. 디렉토리를 삭제하려면 플래그가 필요합니다 .

따라서 해당 파일을 삭제하려는 경우 그렇게하는 것이 안전합니다.

rm대화식으로 만들 수도 있습니다

rm -i wordpress-*.sql

그런 다음 각 파일을 삭제하기 전에 확인을 요청합니다


14

예, 트릭을 수행하고 현재 디렉토리에서 해당 스키마가있는 모든 파일을 제거합니다. 그리고 아니오, 하위 디렉토리 내의 파일을 제거하지 않습니다.

항상 다음과 같은 명령을 실행할 때 어떤 일이 발생하는지 확실하지 않습니다

rm wordpress-*.sql

다음을 사용하여 실행하십시오 ls.

ls wordpress-*.sql

출력에서 볼 수있는 파일은 제거 될 파일입니다.

다음과 같은 목록을 얻으려고 할 때 switch with 를 foo*사용 -d하여 etc ls라는 디렉토리가있는 파일을 나열하지 않도록 하는 것이 좋습니다 foobar/.

ls -d foo*

이 트릭은 재귀 적으로 작업을 수행하는 데 사용되지 않는 명령에 적용됩니다.

다른 방법은 원하는 입력을 입력하는 것입니다. 예를 들어 : + + wordpress-*를 누르면 모든 일치 항목이 명령 앞에 자동으로 입력됩니다.CtrlAlt*


4
내가 가장 좋아하는 방법 :printf "%s\n" wordpress-*.sql
wjandrea

1
Echo처럼 척할 수도 있습니다 echo rm file*. 특히 다음과 같은 적대적인 파일 이름을 찾으십시오-rf
eckes

@eckes : 당신이 중 하나와 함께보다 안전하게 사람들을 커버 할 수있다 rm ./*rm -- *.
David Foerster

예, 또는 사용 xargs -0@DavidFoerster은
eckes

당신이가는 경우에 ls foo*당신이라는 디렉토리를 가지고 foobar, 당신은 또한 너무 평범한하는 그 디렉토리의 내용 목록을 얻을 ls정말 무엇에 가장 좋은 방법은 아니다 rm명중합니다
ilkkachu

12

아니오, rm서브 디렉토리를 통해 재귀하지 않습니다.

하위 디렉토리에서 파일을 삭제하는 방법 은 모든 하위 디렉토리에서 일치하는 파일 삭제-수퍼 유저 를 참조하십시오 .

실수로 중요한 것을 삭제하는 것이 염려되면 gvfs-trash(파일을 휴지통으로 보내는) 대신 rm(파일을 영구적으로 삭제)을 사용하십시오.


gvfs-trash언급하지 주셔서 감사합니다 오늘 그것을 거의 사용하지 않는 것을 배웠습니다 ...
George Udosen

-1

와 같은 모든 일치하는 파일을 찾아 삭제 wordpress-*.sql하려면 findcommand 를 사용할 수 있습니다 . :)

예를 들어, 모든 일치하는 파일을 제거하려는 wordpress-*.sql에서 test_dir다음과 같이 수행합니다.

cd test_dir
find . -name "wordpress-*.sql" -exec rm -f {} \;

find프로그램이 실제로 일치하는 파일을 찾을 때마다 -exec옵션 다음에 오는 명령을 실행하려고 시도합니다 . 이 경우 rm -f {}실행되고 {}일치하는 파일 이름으로 변경됩니다. 예 :

rm -f wordpress-169.sql

-maxdepth옵션을 사용 하여 하위 디렉토리의 깊이를 설정할 수도 있습니다.

cd test_dir
find . -maxdepth 3 -name "wordpress-*.sql" -exec rm -f {} \;

-maxdepth다른 옵션보다 먼저 옵션을 지정해야합니다 . 그렇지 않으면 실제로보고 싶지 않은 결과를 얻을 수 있습니다.


1
OP는 반대를 원합니다. 하위 디렉토리로 재귀하지 않습니다.
Melebius

2
GNU find : "옵션은 옵션 앞에 지정된 테스트를 포함하여 모든 테스트에 영향을 미칩니다."아래 옵션 목록에는 다음이 포함됩니다 -maxdepth. 사용 -exec rm -f {} +하기보다는 -exec \;그냥 더 나은 아직, 또는-delete
ilkkachu은
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.