현재 디렉터리와 모든 하위 디렉터리에 파일을 재귀적으로 추가(또는 터치)하는 방법은 무엇입니까?
예를 들어
다음 디렉토리 트리를 회전하고 싶습니다.
.
├── 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
shell glob을 사용할 수 있습니다. 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}" \;
touch
terdon의 답변에 대한 ChuckCottrill의 의견은 현재 디렉터리와 디렉터리 자체에 있는 $name이라는 파일 에서만 작동하기 때문에 작동하지 않습니다 .
OP가 요청한 대로 하위 디렉터리에 파일을 생성하지 않지만 여기 버전은 생성합니다.
답변4
방금 테스트한 또 다른 예는 여기에서 했던 것처럼 특정 하위 디렉터리에 연속 파일을 만드는 것이었습니다.
├── FOLDER
│ ├── FOLDER1
│ └── FOLDER2
├── FOLDER
│ ├── FOLDER1
│ └── FOLDER2
└── FOLDER
├── FOLDER1
└── FOLDER2
다음 명령을 사용하여 FOLDER2 디렉토리에 연속적인 번호 순서가 있는 파일만 생성합니다.file{1..10}
for d in **/FOLDER2/; do touch $d/file{1..10}.doc; done