폴더를 반복하고 파일을 텍스트로 나열하는 Bash 스크립트

폴더를 반복하고 파일을 텍스트로 나열하는 Bash 스크립트

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 게시물입니다.

관련 정보