내가 사용할 때
find /home/user/parentdir -type d -empty -delete
내부의 빈 하위 폴더를 재귀 적으로 찾고 /home/user/parentdir
삭제합니다. 그러나 /home/user/parentdir
비어있는 경우 parentdir
폴더도 삭제되므로 바람직하지 않습니다.
나는 이것을 유지하려면 parentdir
에 rsync
백업 또는 클라우드로 일부 파일. 처리 후 빈 폴더를 삭제해야하지만 parentdir
매번 다시 생성하는 것은 비생산적인 것 같습니다 .
유지할 제안 parentdir
? 그 .nocopy
안에 파일을 만들고에 대해 제외시키는 것에 대해 생각 rsync
했지만 과도하게 보입니다. 더 우아한 방법이 있습니까?
답변
간단히하세요 find /home/user/parentdir -mindepth 1 -type d -empty -delete
.
보기:
$ mkdir -p test1/test2
$ find test1 -type d
test1
test1/test2
$ find test1 -mindepth 1 -type d
test1/test2
find /home/user/parentdir/*
AmourK의 대답은 거기에 많은 파일이 있고이 overcomplicated 때 바람직하지 않다.
답변
/*
끝에 추가 하면 자체가 parentdir
아닌 parentdir의 모든 하위 디렉토리에서 작업을 수행하게 parentdir
됩니다. 따라서 동일한 방식으로 /home/user/
이전 명령에서 parentdir
삭제되지 않고 아래 명령에서 삭제되지 않습니다.
*
glob 연산자라고하며 모든 문자열과 일치합니다.
find /home/user/parentdir/* -type d -empty -delete
답변
php-cli가 설치되어 있다면
printf %s $(pwd) | php -r 'function f(string $dir){var_dump($dir);$dir.=DIRECTORY_SEPARATOR;foreach(glob("$dir*",GLOB_ONLYDIR) as $d){f($d);}global $original;if(substr($dir,0,-strlen(DIRECTORY_SEPARATOR))!==$original && empty(glob("$dir*"))){rmdir($dir);}}f(($original=stream_get_contents(STDIN)));'
답변
하나의 수준 만 필요한 경우 (부모 폴더는 남기고 빈 자식 폴더는 삭제) 쉬운 방법을 사용하는 것 rmdir
입니다.
rmdir parent/*
빈 하위 폴더를 모두 삭제하지만 파일 및 비어 있지 않은 폴더에 대해서만 오류를 인쇄합니다.
이것은 재귀 적으로 작동하지 않지만 폴더 구조를 알면 다음과 같은 작업을 수행하는 가장 빠른 방법 일 수 있습니다
rmdir parent/*/*/* # deletes parent/a/b/c when empty
rmdir parent/*/* # deletes parent/a/b when it is now empty
rmdir parent/* # deletes parent/a when it is now empty
장점 : 기억하기 쉽고 빠르게 입력 할 수 있으며 잘못된 매개 변수를 선택할 가능성이 거의 없습니다.
단점 : 유연성이 떨어지고 터미널에 많은 오류 메시지가있을 수 있습니다.