이 작은 쉘 스크립트에 대한 나의 오해를 찾아주세요

이 작은 쉘 스크립트에 대한 나의 오해를 찾아주세요

실제로 저는 각각에 많은 이미지가 포함된 여러 하위 폴더가 포함된 폴더를 가지고 있습니다.

각 하위 폴더의 모든 파일 이름을 해당 하위 폴더의 텍스트 파일(filesNames.txt) 형식으로 수집하려고 합니다.

절대/경로/대상/각/파일/파일 이름

그래서 상위 폴더에 스크립트를 작성했습니다.

#!/bin/sh

for dir in "$PWD"/*/; do
arr=( "$dir"* )
cd "$dir"
printf "%s 1\n" "$PWD/${arr[@]##*/}" > "$dir"filesNames.txt
cd ..
done

내 문제그것은:

각 하위 폴더의 첫 번째 파일에 대한 절대 주소가 있습니다. 나머지에는 절대 주소가 없는 파일 이름만 있습니다.

 /run/media/parent_folder/subfolder/filename1.png
 filename2.png
 filename3.png
 ...

나는 그것이 관련이 있다고 생각한다.$PWD각 하위 폴더에 대해 한 번만 반복하는 변수입니다. 스크립트를 적절한 형식으로 어떻게 변경할 수 있나요?

미리 감사드립니다.

답변1

단일 find명령은 절대 경로를 사용하여 모든 파일을 출력합니다.

find $(pwd) -type f

답변2

순수 쉘 스크립트를 사용하여 해당 작업을 수행하고 싶고 find를 사용하고 싶지 않은 경우 다음을 시도해 보세요.

#!/bin/bash
#Simple bash recursive loop search - Luciano A. Martini =) 
nextdir(){
for f in *; do 
   if [ -d "$f" ] && [ ! -L "$f" ]; then
        #echo "Inside folder: $PWD/$f"
        nextdir "$f"
        cd ..
        continue
   else
        echo "$PWD/$f"
   fi
done 
}
#call the function for the first time...
nextdir 

예를 들어 재귀 루프로 저장하고 검색하려는 폴더에서 실행하십시오. 이는 find 또는 기타 재귀 메커니즘이 수행하는 작업을 정확하게 수행하지만 for 루프를 사용하므로 필요에 맞게 사용자 정의할 수 있습니다!

$./recursive-loop
/home/luciano/readme.txt
/home/luciano/images/a.bmp
/home/luciano/texts/a.txt
/home/luciano/texts/b.txt
/home/luciano/texts/music/lyrics.txt
(...)

관련 정보