Bash: 임의의 이미지를 선택한 후 .txt 파일에 파일 이름과 디렉터리 이름을 쓰는 방법

Bash: 임의의 이미지를 선택한 후 .txt 파일에 파일 이름과 디렉터리 이름을 쓰는 방법

여러 하위 디렉터리에서 이미지를 무작위로 선택하기 위해 Bash 스크립트를 조합했는데 훌륭하게 작동했습니다.

이제 이미지 이름과 이미지를 가져온 디렉터리 이름이 포함된 두 개의 .txt 파일이 필요합니다. 이 두 txt 파일의 내용은 Joomla 웹사이트의 기사에 삽입됩니다. 이미지 소스는 여러 디렉터리입니다: /home/my-dir/public_html/images/archive-pics/

임의의 이미지와 두 개의 .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입니다.

임의의 이미지를 선택할 때 두 개의 .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 파일을 인식했습니다. 그렇기 때문에 데이터가 포함된 두 개의 간단한 .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"

관련 정보