2016-06-25 4 views
1

많은 하위 디렉토리가있는 거대한 디렉토리가 있습니다. 하지만 일부 하위 디렉토리 이름은 이거나 또는 이상한 것 같은 이상한 문자입니다. 디렉토리는 다음과 같습니다 : 디렉토리의리눅스에서 특정 디렉토리를 삭제하는 방법

/ 
/a,/b,/1,/0,/$,/β 
/a/c,/1/a,/b/β 

깊이는 3이고, 나는 모든 디렉토리 26 letters (a-z)에없는 그 이름을 제거하고 싶습니다. Remove ./1, ./$, ./β .../a/1, /b/β, /a/b/2.

나는 결합하려고 findgrepparallel (A gnu xargs) grep이, 이상한 작동 내가 grep [a-z]를 사용하는 경우, 또한 예를 들어, a with a circle on the top의 이상한 편지를 포함합니다.

find . -type d -maxdepth 2|grep -v '\/[a|b|c|d|e|f|g|h|i|j|K|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z]+/[a|b|c|d|e|f|g|h|i|j|K|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z]+'|parallel -X -r rm -r 

을하지만 그것은 단지 모든 파일을 제거합니다 그래서, 나는이를 wirte! grep 출력은 . 디렉토리와 하위 디렉토리 인 /p을 포함하고 있습니다. 삭제하지 않으려 고하지만 정규 표현식에 따르면이 파일은 포함되지 않아야한다고 생각합니다.

왜 이런 일이 발생합니까? 그리고 어떻게 그 디렉토리를 제거 할 수 있습니까?

+1

적어도 실행 파이프는 쓸모 없으며, insi 인 캐릭터는 없습니다. de []가 수락됩니다. –

+0

그것은'+'가 리터럴'+ '부호를 찾기 때문에 발생합니다. 당신의 디렉토리 이름은'+'를 포함하지 않으므로,'grep -v'는 그 모든 것을 통과시킵니다. – melpomene

+0

'\ +'를 사용하면 리터럴 '+'가 대신 검색됩니다. – Ziu

답변

4

, 이유를 사용하지 :

find . -maxdepth 2 -type d ! -iregex '.*/[a-z]+' -exec rm -r {} \; 

메모 :

  • -iregex :
  • -exec 대소 문자를 구분하지 정규식 : 명령을
+0

이것은 번호 나 기호를 이름으로 가진 디렉토리를 제거 할 수 있지만, 위와 같은 원을 가진'a'와 같은 이상한 이름을 가진 디렉토리는 삭제할 수 없습니다. 키보드에 입력 할 수 없습니다. – Ziu

+0

@Ziu :'. */[a-z] +'를 더 길게 바꾼다 :'. */[abcdefghijklmnopqrstuvwxyz] +' – Jahid

1

당신은 Bash's special globbing features을 사용할 수 있습니다 : 당신은 그것을 끝까지 가기 전에 삭제 될 파일을 확인하는 ls -d 대신 rm -r을 사용할 수 있습니다

$ cd -- "$(mktemp --directory)" 
$ mkdir a b 1 
$ touch 0 '$' β a/c 1/a b/β 
$ ls -R . 
.: 
'$' 0 1 a b β 

./1: 
a 

./a: 
c 

./b: 
β 
$ shopt -s extglob globstar 
$ rm -r **/!([a-z])/ 
$ ls -R . 
.: 
a b 

./a: 
c 

./b: 

. 자체 정규식을 사용할 수 있습니다 find

+0

OP는 _directories_를 언급하기 때문에 glob는'** /! ([a-z]) /'이어야합니다. 또한'mkdir -p β/β'를 사용하면'β /'가'β/β/'전에 globbed되고'β /'를 제거한 후에'rm'이'/β /'는 존재하지 않습니다. 그래서 재귀적인 삭제를 적절히 처리하기 위해'-depth'와 함께'find'를 사용하기를 원합니다. –

+0

그 불만 사항은 목표 목표가 여전히 충족 되었기 때문에 안전하게 무시할 수 있습니다 (또는'-f'를 사용하여 제거 할 수 있습니다). 그리고 내용이 나오기 전에 디렉토리를 제거하면 각 파일을 먼저 재귀 적으로 제거하는 것보다 전체 명령이 빠릅니다 *라는 것을 의미합니다. – l0b0

관련 문제