Windows CMD 스크립트에서 이 작업을 수행할 수 있지만 지금은 Raspberry Pi를 통해 Debian을 사용하고 있습니다.
내가 하고 싶은 일은...
(현재 폴더에서)
- 각 하위 폴더에 대해...
- Original_filenames.txt라는 파일을 만듭니다.
- 폴더 이름을 original_filenames.txt로 에코
- 모든 파일(하위 폴더 포함)을 Original_filenames.txt에 나열합니다.
답변1
쉘 루프를 사용하십시오:
for dir in */; do
{ printf '%s\n' "$dir"
( cd "$dir" && find . )
} >"$dir/original_filenames.txt"
done
이는 현재 디렉터리의 모든 하위 디렉터리를 반복합니다. 루프 본문은 디렉터리 이름을 인쇄한 다음 디렉터리에 있는 모든 파일 및 디렉터리 목록을 반복적으로 인쇄합니다. 이 출력은 original_filenames.txt
디렉터리의 파일 로 이동됩니다 .
더 짧게:
for dir in */; do
find "$dir" >"$dir/original_filenames.txt"
done
기록되는 파일의 경로 이름이 모두 하위 폴더 이름으로 시작하기 때문에 약간 다른 출력이 생성됩니다.
디렉토리 이름에는 관심이 없고 일반 파일의 경로명만 원하는 경우에는 디렉토리 이름 뒤에 with를 사용하십시오 find
.-type f
계획중이시라면 참고하세요사용발견된 경로 이름 중 개행 문자가 포함된 경우(Unix 시스템에서는 전적으로 가능함) 콘텐츠의 출력 파일 생성이 실패하거나 적어도 매우 문제가 됩니다.
답변2
find
아래와 같이 명령과 옵션을 사용하여 exec
이 작업을 수행 할 수 있습니다 .
find . -type d \( ! -name . \) -exec bash -c '
dirname=$(basename "{}") &&
cd "{}" &&
echo "{}" > original_filenames.txt &&
ls | grep -Fv original_filenames.txt >> original_filenames.txt
' \;
다음은 유용한 StackOverflow 게시물입니다.