1行にフォルダ内のすべてのファイルを一覧表示するシェルスクリプト

1行にフォルダ内のすべてのファイルを一覧表示するシェルスクリプト

次のフォルダ構造があります。

/Brand/ProductCode01
/Brand/ProductCode02

ここに画像の説明を入力してください。

各ProductCode##フォルダには、次のような多くのJPGファイルが含まれています。

image01.jpg, image02.jpgなど。

"ProductCode##"フォルダー内のすべてのファイルを一覧表示するProductCodeごとに1行のファイルを作成する必要があります。たとえば、次のようになります。

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

すべてのファイルは1行にリストされ、スペースで区切られ、最後のファイル名に改行文字で終わる必要があります。

どんな提案がありますか?

ありがとうございます。

答え1

CR-LFとLFを混同しないでくださいまた〜として知られています結婚返品そしてエルイネF必要

このように:

$ 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/ディレクトリツリーにあります)(サブディレクトリごとに1行セット)
  • 各ファイル名の前には引用符が付きます(後でスペースやその他の特殊文字を含むファイル名を管理するため)。
  • 改行文字は空白に変換されます。
  • 各行の最後のスペースは改行文字に変換されます。

答え4

ls -1 | tr '\n' ' '

-q および -b フラグも参照してください。

関連情報