단일 유형의 파일로 모든 빈 디렉토리 및 디렉토리 찾기

데이비드

모든 빈 디렉터리와 .DS_StoreMac에서 생성 하는 파일 만 포함하는 디렉터리를 삭제하는 bash 스크립트를 작성하려고합니다 . 나는 전자를 꽤 쉽게 find -depth -type d -empty할 수 있지만 .NET 포함 하는 디렉토리를 찾는 방법을 알 수 없습니다 .DS_Store.

재귀 검색 기능을 작성하지 않고 쉽게 수행 할 수있는 방법이 있습니까?

Gilles 'SO- 그만 사악함'

POSIX sh + 찾기

다음은 POSIX find 및 POSIX sh에만 의존하는 솔루션입니다. 모든 디렉토리를 나열한 다음라는 항목 만 포함 된 디렉토리를 필터링합니다 .DS_Store.

find -type d -exec sh -c '
    cd "$0" &&
    for x in * .[!.]* ..?*; do
      if [ "$x" = ".DS_Store" ]; then continue; fi;
      if [ -e "$x" ] || [ -L "$x" ]; then exit 1; fi;
    done' {} \; -print
  • find모든 디렉토리를 재귀 적으로 열거 하는 사용 합니다.
  • 각 디렉토리에서 sh쉘 코드를 실행하기 위해 호출 합니다.
  • for루프는 디렉토리에있는 모든 파일을 열거합니다.
  • 루프의 본문은 .DS_Store.
  • 세 가지 패턴 각각은 파일과 일치하지 않는 경우 변경되지 않은 상태로 유지됩니다. [ -e "$x" ] || [ -L "$x" ]끊어진 기호 링크를 포함한 모든 파일을 캡처합니다. 일치하지 않는 유일한 방법은 패턴이 변경되지 않은 경우입니다.
  • 따라서 셸 스 니펫은 exit 1이외의 파일이 있으면 실행 .DS_Store되고 그렇지 않으면 성공하면 0을 반환합니다.
  • 변경 -print-exec …당신이 이름을 인쇄 이외의 작업을 수행하려는 경우.

Zsh

다음은 zsh의 솔루션입니다. echo실행하려는 명령으로 변경하십시오 .

setopt extended_glob
echo **/*(/DNe\''a=($REPLY/^.DS_Store(DNY1)); ((!#a))'\')
  • **/* 모든 파일을 재귀 적으로 열거합니다.
  • 으로 글로브 규정 / , **/*(/)재귀 적으로 모든 디렉토리를 열거합니다.
  • glob 한정자 N는 일치하는 항목이없는 경우 빈 목록을 가져 오도록합니다 (기본적으로 zsh는 오류를 나타냄).
  • glob 한정자 D는 도트 파일이 포함되도록합니다.
  • glob 한정자 일치하는 각 파일 이름에서 실행 되며 성공한 파일로 일치를 제한 합니다. 변수 사용하여 파일 이름을 참조 할 수 있습니다 .e\''CODE'\'CODECODECODE$REPLY
  • ^.DS_Store호출되지 않은 파일과 일치합니다 .DS_Store.
  • 따라서 CODE.DS_Store이외의 파일 수가 0 인 항목에 대한 일치를 제한합니다 .
  • glob 한정자 Y1는 일치 항목을 하나로 제한합니다 (효율성 향상 일뿐입니다).

파이썬

다음은 Python의 솔루션입니다 (2와 3 모두에서 작동). 이것이 한 줄로 압축 되었음에도 불구하고 구조는 다소 명확합니다.

python -c 'import os; print("\n".join([path for path, dirs, files in os.walk(".") if dirs == [] and files in ([], [".DS_Store"])]))'
  • os.walk인수 아래에 재귀 적으로 디렉토리 목록을 반환합니다. 각 디렉토리에 대해 (디렉토리 path경로), dirs(하위 디렉토리 목록) 및 files(디렉토리 자체가 아닌 디렉토리의 파일 목록 )을 포함하는 트리플을 생성합니다 .
  • [… for … in os.walk(…) if …]의 결과를 필터링합니다 os.walk.
  • if절은 하위 디렉토리가없고 .NET 이외의 파일이없는 경우에만 요소를 유지합니다 .DS_Store.
  • 스크립트는 허용 된 요소를 인쇄하고 그 사이와 최종 줄 바꿈 사이에 줄 바꿈으로 연결합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

디렉토리 및 하위 디렉토리의 모든 txt 파일에 쓰기

분류에서Dev

디렉토리 및 하위 디렉토리에서 모든 파일 찾기

분류에서Dev

NSLibraryDirectory의 모든 파일 및 디렉토리 이름 바꾸기

분류에서Dev

현재 디렉토리를 포함하여 현재 디렉토리 아래에 여러 이름의 파일이있는 모든 파일, 빈 디렉토리 및 디렉토리를 재귀 적으로 삭제합니다.

분류에서Dev

ajax로 디렉토리의 모든 파일 가져 오기

분류에서Dev

모든 파일 및 디렉토리를 대상 디렉토리로 이동

분류에서Dev

모든 파일 및 디렉토리를 대상 디렉토리로 이동

분류에서Dev

PHP를 사용하여 디렉토리 및 디렉토리의 파일 읽기

분류에서Dev

chmod 디렉토리의 모든 파일

분류에서Dev

R : 디렉토리의 모든 빈 파일을 효율적으로 삭제

분류에서Dev

Linux 명령 줄. 일부 파일 및 디렉토리를 제외하고 디렉토리의 모든 파일 및 디렉토리 이동

분류에서Dev

디렉토리의 모든 파일을 동일한 디렉토리의 새 하위 디렉토리로 이동

분류에서Dev

디렉토리에서 특정 유형의 모든 파일 이름 바꾸기

분류에서Dev

하나의 하위 디렉토리를 제외하고 dir 및 모든 하위 디렉토리에서 모든 파일 가져 오기

분류에서Dev

경로, 크기 및 유형없이 디렉토리에서 모든 파일을 찾고 파일 이름을 나열하는 기능?

분류에서Dev

디렉토리 및 모든 서브 디렉토리에서 Java 파일 가져 오기

분류에서Dev

하나의 디렉토리 및 하위 디렉토리에서 일치하는 파일 찾기

분류에서Dev

하위 디렉토리 및 상위 디렉토리의 모든 c 파일 나열

분류에서Dev

하위 디렉토리 및 상위 디렉토리의 모든 c 파일 나열

분류에서Dev

하위 디렉토리의 모든 파일 이름 바꾸기

분류에서Dev

json 디렉토리의 모든 파일 가져 오기

분류에서Dev

디렉토리의 모든 파일 열기-Python

분류에서Dev

Perl : 디렉토리의 모든 파일 읽기, 오류 : 해당 파일 또는 디렉토리 없음

분류에서Dev

모든 파일 및 디렉토리를 읽기 전용으로 설정

분류에서Dev

Linux의 'test'디렉토리를 제외한 디렉토리에서 모든 '.c'및 '.h'파일을 찾습니다.

분류에서Dev

Linux의 'test'디렉토리를 제외한 디렉토리에서 모든 '.c'및 '.h'파일을 찾습니다.

분류에서Dev

디렉토리에있는 모든 파일 이름의 최대 길이 찾기

분류에서Dev

디렉토리 자체를 유지하면서 이름으로 디렉토리를 재귀 적으로 찾고 그 내용 (모든 하위 디렉토리 및 파일 포함)을 삭제하려면 어떻게해야합니까?

분류에서Dev

디렉토리 자체를 유지하면서 이름으로 디렉토리를 재귀 적으로 찾고 그 내용 (모든 하위 디렉토리 및 파일 포함)을 삭제하려면 어떻게해야합니까?

Related 관련 기사

  1. 1

    디렉토리 및 하위 디렉토리의 모든 txt 파일에 쓰기

  2. 2

    디렉토리 및 하위 디렉토리에서 모든 파일 찾기

  3. 3

    NSLibraryDirectory의 모든 파일 및 디렉토리 이름 바꾸기

  4. 4

    현재 디렉토리를 포함하여 현재 디렉토리 아래에 여러 이름의 파일이있는 모든 파일, 빈 디렉토리 및 디렉토리를 재귀 적으로 삭제합니다.

  5. 5

    ajax로 디렉토리의 모든 파일 가져 오기

  6. 6

    모든 파일 및 디렉토리를 대상 디렉토리로 이동

  7. 7

    모든 파일 및 디렉토리를 대상 디렉토리로 이동

  8. 8

    PHP를 사용하여 디렉토리 및 디렉토리의 파일 읽기

  9. 9

    chmod 디렉토리의 모든 파일

  10. 10

    R : 디렉토리의 모든 빈 파일을 효율적으로 삭제

  11. 11

    Linux 명령 줄. 일부 파일 및 디렉토리를 제외하고 디렉토리의 모든 파일 및 디렉토리 이동

  12. 12

    디렉토리의 모든 파일을 동일한 디렉토리의 새 하위 디렉토리로 이동

  13. 13

    디렉토리에서 특정 유형의 모든 파일 이름 바꾸기

  14. 14

    하나의 하위 디렉토리를 제외하고 dir 및 모든 하위 디렉토리에서 모든 파일 가져 오기

  15. 15

    경로, 크기 및 유형없이 디렉토리에서 모든 파일을 찾고 파일 이름을 나열하는 기능?

  16. 16

    디렉토리 및 모든 서브 디렉토리에서 Java 파일 가져 오기

  17. 17

    하나의 디렉토리 및 하위 디렉토리에서 일치하는 파일 찾기

  18. 18

    하위 디렉토리 및 상위 디렉토리의 모든 c 파일 나열

  19. 19

    하위 디렉토리 및 상위 디렉토리의 모든 c 파일 나열

  20. 20

    하위 디렉토리의 모든 파일 이름 바꾸기

  21. 21

    json 디렉토리의 모든 파일 가져 오기

  22. 22

    디렉토리의 모든 파일 열기-Python

  23. 23

    Perl : 디렉토리의 모든 파일 읽기, 오류 : 해당 파일 또는 디렉토리 없음

  24. 24

    모든 파일 및 디렉토리를 읽기 전용으로 설정

  25. 25

    Linux의 'test'디렉토리를 제외한 디렉토리에서 모든 '.c'및 '.h'파일을 찾습니다.

  26. 26

    Linux의 'test'디렉토리를 제외한 디렉토리에서 모든 '.c'및 '.h'파일을 찾습니다.

  27. 27

    디렉토리에있는 모든 파일 이름의 최대 길이 찾기

  28. 28

    디렉토리 자체를 유지하면서 이름으로 디렉토리를 재귀 적으로 찾고 그 내용 (모든 하위 디렉토리 및 파일 포함)을 삭제하려면 어떻게해야합니까?

  29. 29

    디렉토리 자체를 유지하면서 이름으로 디렉토리를 재귀 적으로 찾고 그 내용 (모든 하위 디렉토리 및 파일 포함)을 삭제하려면 어떻게해야합니까?

뜨겁다태그

보관