이 작은 쉘 스크립트에 대한 나의 오해를 발견했습니다.

이 작은 쉘 스크립트에 대한 나의 오해를 발견했습니다.

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

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

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

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

#!/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 

예를 들어 재귀 루프로 저장하고 검색하려는 폴더에서 실행합니다. 찾기나 다른 재귀 메커니즘이 수행하는 작업을 정확하게 수행하지만 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
(...)

관련 정보