Bash:任意の画像を選択した後に.txtファイルにファイル名とディレクトリ名を書き込む方法

Bash:任意の画像を選択した後に.txtファイルにファイル名とディレクトリ名を書き込む方法

私はいくつかのサブディレクトリから画像をランダムに選択するためにBashスクリプトを組み合わせましたが、うまくいきました。

これで、イメージ名とイメージをインポートしたディレクトリ名を含む2つの.txtファイルが必要です。これら2つのtxtファイルの内容はJoomlaのウェブサイトの記事に挿入されます。イメージソースは複数のディレクトリです:/home/my-dir/public_html/images/archive-pics/

ランダムイメージと2つの.txtファイルのターゲットディレクトリは/home/my-dir/public_html/images/archive-pic-of-day/です。

.txtファイルの必須形式は、name.txtファイルの「005.jpg」、dir.txtファイルの「outside-buildings」です(引用符を除く)。イメージソースは....archive-pics/outside-building/005.jpgです。

任意の画像を選択するときに2つの.txtファイルを作成するために必要なコードに関する提案を提供してください。私はコーダーではありませんが、指示に従うことができます。

画像選択スクリプトは次のとおりです。

#!/usr/bin/bash
#pic-of-day.sh: Randomly picks an image

#  /bin/bash /home/my-dir/pic-of-day.sh ...  for cron
# first, delete the existing image in the pic of the day folder
rm /home/my-dir/public_html/images/archive-pic-of-day/*.jpg

# now, look through the archive images and pick one to copy to the
# pic of the day folder
cp "$(find /home/my-dir/public_html/images/archive-pics/ -iname '*.jpg' \
        -print0 | shuf -z -n1)" \
    /home/my-dir/public_html/images/archive-pic-of-day/ 

@Pourko コメントありがとうございます… ..おそらく私はうまく説明できなかったようです… 。

画像は、説明テキストの定型句と記事のコンテナを介してウェブサイトのページに表示されます。画像を含む複数のサブディレクトリがあるので、定型句の適切な場所にテキストを挿入してイベントが発生する場所を特定したいと思います。すべてのサブディレクトリはイベントとして表示されます。簡単な例は次のとおりです。とにかく…このプロジェクトは[鍛冶屋]で数年間行われていました。 []内のテキストは、画像を含むサブディレクトリの名前になります。この時点では、フルパスやファイル名は必要ありません。ストーリー自体は画像の上または下に表示されます。

問題をさらに複雑にするには、Joomla拡張機能を使用してコンテンツを記事にインポートする必要があり、拡張機能は.txtファイルを認識しました。そのため、データを含む2つの単純な.txtファイルが機能すると思いました。

今はファイル名は必要ありませんが、今後は必要になる可能性があります。毎日新しい画像とストーリーが表示されます。申し訳ありません。あなたのソリューションが私の記事にどのように適用されるかわかりません。

ベストアンサー1

ランダムに選択したファイルへのシンボリックリンクを作成するだけです。これにより、ファイルをコピーする必要がなくなります。

pic_dir='/home/my-dir/public_html/images/archive-pics'
link_dir='/home/my-dir/public_html/images/archive-pic-of-day'

rand_pic="$(find "$pic_dir/" -type f -iname '*.jpg' -print0 | shuf -z -n1)"
ln -sf "$rand_pic" "$link_dir/pic_of_the_day.jpg"

# to extract just the names, and save them in text files...
basename -- "$rand_pic" > "$link_dir/pic.txt"
basename -- "$(dirname -- "$rand_pic")" > "$link_dir/dir.txt"

おすすめ記事