次のフォルダ構造があります。
/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
シェルのようにzsh
Bourneでも動作します。ksh
答え2
存在するzsh
:
{
for dir ( /Brand/ProductCode<->(Nn/) )
() {print -rC1 -- "$*"} $dir/image<->.jpg(Nn)
} > your-file.txt
または/
(glob修飾子)内に名前があるディレクトリの/Brand
場合定期的なファイル(.
修飾子)が繰り返し含まれます(まだn
glob修飾子を使用して数字でソートされます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 フラグも参照してください。