
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
이는 파일에 기록된 경로 이름이 모두 하위 폴더 이름으로 시작한다는 점에서 약간 다른 출력을 제공합니다.
디렉토리 이름에 관심이 없고 일반 파일의 경로 이름만 원하는 경우 디렉토리 이름 뒤에 find
with를 사용하십시오.-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 게시물입니다.