한 줄에 폴더의 모든 파일을 나열하는 쉘 스크립트

한 줄에 폴더의 모든 파일을 나열하는 쉘 스크립트

다음과 같은 폴더 구조가 있습니다.

/Brand/ProductCode01
/Brand/ProductCode02

여기에 이미지 설명을 입력하세요.

각 ProductCode## 폴더에는 다음과 같은 많은 JPG 파일이 포함되어 있습니다.

image01.jpg, image02.jpg등.

"ProductCode##" 폴더에 있는 모든 파일을 나열하는 ProductCode당 한 줄이 포함된 파일을 만들어야 합니다. 예를 들면 다음과 같습니다.

/Brand/ProductCode01/image01.jpg /Brand/ProductCode01/image02.jpg /Brand/ProductCode01/image03.jpg
/Brand/ProductCode02/image01.jpg /Brand/ProductCode02/image02.jpg

모든 파일은 한 줄에 나열되어야 하며 공백으로 구분되고 마지막 파일 이름에 개행 문자로 끝나야 합니다.

어떤 제안이 있으십니까?

감사해요.

답변1

CR-LF와 LF를 혼동하지 마십시오!또한 ~으로 알려진결혼오른쪽반품그리고이네에프필요

이와 같이:

$ tree
.
└── Brand
    └── Ducati
        ├── A 1060
        │   ├── image01.jpg
        │   └── image02.jpg
        ├── A 1061
        │   ├── image01.jpg
        │   └── image02.jpg
        ├── A 1062
        │   ├── image01.jpg
        │   └── image02.jpg
        └── A 1063
            ├── image01.jpg
            └── image02.jpg

6 directories, 8 files
$ for d in ./Brand/Ducati/A*/; do echo "$d"image*.jpg; done | tee file.txt
./Brand/Ducati/A 1060/image01.jpg ./Brand/Ducati/A 1060/image02.jpg
./Brand/Ducati/A 1061/image01.jpg ./Brand/Ducati/A 1061/image02.jpg
./Brand/Ducati/A 1062/image01.jpg ./Brand/Ducati/A 1062/image02.jpg
./Brand/Ducati/A 1063/image01.jpg ./Brand/Ducati/A 1063/image02.jpg

bash쉘처럼 zshBourne에서도 작동 할 수 있습니다 .ksh

답변2

존재하다 zsh:

{
  for dir ( /Brand/ProductCode<->(Nn/) )
    () {print -rC1 -- "$*"} $dir/image<->.jpg(Nn)
} > your-file.txt

또는 /(glob 한정자) 내부에 이름이 있는 디렉터리 의 /Brand경우정기적인파일( .한정자)이 반복적으로 포함됩니다(여전히 nglob 한정자를 사용하여 숫자로 정렬됨 n):

{
  for dir ( /Brand/*(Nn/) )
    () {printf -rC1 -- "$*"} $dir/**/*(Nn.)
} > your-file.txt

줄 바꿈(또는 여기에서 구분 기호로 사용하는 공백)이 파일 경로의 모든 문자만큼 유효하기 때문에 브랜드당 여러 줄이 표시된다는 의미는 아닙니다.

답변3

그것은 함께 있어야합니다

for i in /Brand/Ducati/*/; do ( find "$i" -type f | sed -e "s/^/'/" -e "s/$/'/"| tr '\n' ' '|sed "s/ $/\n/" ); done
  • 모든 파일 이름이 나열됩니다(/Brand/Ducati/subdirs/ 디렉토리 트리에 있음)(하위 디렉토리당 한 줄 세트)
  • 각 파일 이름 앞에는 따옴표가 붙습니다(나중에 공백 및 기타 특수 문자가 포함된 파일 이름을 관리하기 위해).
  • 개행 문자는 공백으로 변환됩니다.
  • 각 줄의 마지막 공백은 개행 문자로 변환됩니다.

답변4

ls -1 | tr '\n' ' '

-q 및 -b 플래그도 참조하십시오.

관련 정보