모든 디렉토리 내에 "Photo" 폴더를 반복적으로 생성합니다.

모든 디렉토리 내에 "Photo" 폴더를 반복적으로 생성합니다.

폴더가 여러 개 있고 해당 폴더를 모두 반복하고 각 폴더에 "Photo"라는 이름의 다른 폴더를 만들고 싶습니다.

F1
--F11
----F111
----F112
--F12

가지고 싶다:

F1
--Photo
--F11
----Photo
----F111
------Photo
----F112
------Photo
--F12
----Photo

답변1

단일 find호출을 사용하여 이를 달성할 수 있습니다.

find . -name 'Photo' -prune -o -type d -exec mkdir {}/Photo \;

이 부분은 -name 'Photo' -prune -o기존(그리고 새로 생성된) 디렉터리로 재귀하지 말라고 지시합니다 Photo. 발견된 파일(또는 디렉터리)의 이름이 Photo이면 처리를 중지합니다( -prune). 다른 경우( -o)에서는 디렉터리( -type d)를 계속 사용하고 -exec명령을 실행( )합니다.

답변2

파일 이름에 공백이 있어도 깨지지 않기 때문에 find결과를 대신 while전달할 수 있습니다 .for

먼저 디렉토리로 cd한 F1후 다음을 수행하십시오.

find -type d | while read dir ; do mkdir "$dir"/Photo ; done

디렉토리가 존재하는 경우 mkdir생성을 거부하므로 문제가 없습니다.

디렉터리 이름에 줄 바꿈이나 기타 이상한 내용이 포함될 수 있는 경우 임의의 이름을 처리할 수 있는 다음을 사용하세요.

find -type d -print0 | while IFS= read -r -d '' dir ; do mkdir "$dir"/Photo ; done

이에 대한 도움을 주신 @terdon에게 감사드립니다 :)

답변3

F1 바로 위의 디렉터리에서 다음 스크립트를 실행합니다.

스크립트의 목적은 사진 디렉토리 아래에 중복된 사진 디렉토리가 생성되는 것을 방지하는 것입니다.

또한 사용자의 루트 디렉토리와 같은 잘못된 위치에서 실수로 실행되는 것을 방지하기 위한 설계입니다. 반면 디렉토리를 보지 못하고 F1실수로 잘못된 궁전에 수백 개의 사진 디렉토리를 생성합니다.

또한 사용자가 사용자 정의할 수 있도록 스크립트를 쉽게 따라할 수 있도록 만드는 것이 내 의도였습니다.

#!/bin/bash

while IFS= read -r -d '' i;
do
    if [[ ! -d $i/Photo ]]; then
        # Filter to skip folders named Photo
        thisfolder="$(echo $i | sed "s/.*\///")"
        if [[ ! $thisfolder == "Photo" ]]; then
            mkdir "$i/Photo"
        fi
    fi
done < <(find F1 -type d -print0)

스크립트 업데이트:

  • 소문자를 대문자로 p변경 했습니다.photo
  • 비표준 파일 이름에 대한 지원이 추가되었습니다(Terdon의 제안 포함).

답변4

Bash를 사용하는 경우 간단히 다음을 실행할 수 있습니다.

shopt -s globstar
for d in **/; do mkdir -p "$d"/Photo; done

globstar옵션은 **"모든 파일과 0개 이상의 디렉터리 및 하위 디렉터리"를 일치시킵니다. 즉, 모든 것을 재귀적으로 일치시킵니다. /끝에 있기 때문에 **/모든 디렉터리 및 하위 디렉터리(파일 없음)와 일치합니다. 따라서 는 $d현재 디렉터리와 해당 하위 디렉터리의 모든 디렉터리를 반복하고 디렉터리는 Photos각각에 생성됩니다.

깃발 -pmkdir의미는 다음과 같습니다.

  -p, --parents
          no error if existing, make parent directories as needed

여기서는 대상 디렉터리가 이미 존재하는 경우 오류 메시지를 표시하지 않기 위해 이를 사용하고 있습니다. 오류를 보려면 제거하세요.

이렇게 하면 Photo다음을 포함하는 대상 디렉터리에 하위 디렉터리를 생성하는 데 실패합니다.파일사진이라는 이름을 붙였습니다. 하지만 이러한 경우 수행해야 할 작업을 지정하지 않았으며 지금까지 게시된 다른 모든 답변에도 이러한 제한이 있습니다.

관련 정보