모든 하위 디렉터리에 파일을 반복적으로 추가합니다.

모든 하위 디렉터리에 파일을 반복적으로 추가합니다.

현재 디렉터리와 모든 하위 디렉터리에 파일을 재귀적으로 추가(또는 터치)하려면 어떻게 해야 합니까?

예를 들어,
다음 디렉토리 트리를 바꾸고 싶습니다.

.
├── 1
│   ├── A
│   └── B
├── 2
│   └── A
└── 3
    ├── A
    └── B
        └── I   
9 directories, 0 files

~ 안으로

.
├── 1
│   ├── A
│   │   └── file
│   ├── B
│   │   └── file
│   └── file
├── 2
│   ├── A
│   │   └── file
│   └── file
├── 3
│   ├── A
│   │   └── file
│   ├── B
│   │   ├── file
│   │   └── I
│   │       └── file
│   └── file
└── file

9 directories, 10 files

답변1

어떻습니까:

find . -type d -exec cp file {} \;

에서 man find:

   -type c
          File is of type c:
           d      directory

   -exec command ;
          Execute  command;  All following arguments to find are taken 
          to be arguments to the command until an  argument  consisting 
          of `;' is encountered.  The string `{}' is replaced by the 
          current file

따라서 위의 명령은 모든 디렉터리를 찾아 cp file DIR_NAME/각 디렉터리에서 실행됩니다.

답변2

빈 파일을 생성하려면 touch및 쉘 글로브를 사용할 수 있습니다. zsh에서:

touch **/*(/e:REPLY+=/file:)

배쉬에서:

shopt -s globstar
for d in **/*/; do touch -- "$d/file"; done

이식 가능하게는 다음을 사용할 수 있습니다 find.

find . -type d -exec sh -c 'for d; do touch "$d/file"; done' _ {} +

find전부는 아니지만 일부 구현에서는 다음을 작성할 수 있습니다.find . -type d -exec touch {}/file \;

일부 참조 콘텐츠를 복사하려면 find루프를 호출해야 합니다. zsh에서:

for d in **/*(/); do cp -p reference_file "$d/file"; done

배쉬에서:

shopt -s globstar
for d in **/*/; do cp -p reference_file "$d/file"; done

이식 가능:

find . -type d -exec sh -c 'for d; do cp -p reference_file "$d/file"; done' _ {} +

답변3

touch현재 디렉터리와 모든 하위 디렉터리에 $name이라는 파일을 넣으려면 다음과 같이 하면 됩니다.

find . -type d -exec touch {}/"${name}"  \;

terdon의 답변에 대한 ChuckCottrill의 주석은 작동하지 않습니다. touch현재 디렉터리와 디렉터리 자체에 있는 $name이라는 파일만 작동하기 때문입니다.

OP에서 요청한 대로 하위 디렉터리에 파일을 생성하지 않지만 여기서는 이 버전이 생성됩니다.

답변4

내가 방금 테스트한 또 다른 예는 여기에 있는 것처럼 특정 하위 디렉터리에 연속적인 파일을 만드는 것입니다.

├── FOLDER
│   ├── FOLDER1
│   └── FOLDER2
├── FOLDER
│   ├── FOLDER1
│   └── FOLDER2
└── FOLDER
    ├── FOLDER1
    └── FOLDER2

아래에서 이 명령을 사용하여 다음과 같은 연속 번호 시퀀스가 ​​있는 FOLDER2 dir 파일만 생성했습니다.file{1..10}

for d in **/FOLDER2/; do touch $d/file{1..10}.doc; done

관련 정보