Сценарий bash: копирование определенного содержимого папки в папке из каждой папки в новую папку на рабочем столе - PullRequest
0 голосов
/ 31 августа 2018

Я стараюсь изо всех сил описать эту ситуацию. Заранее спасибо.

ШАГ 1: скопировать изображение в папку на рабочем столе в новую папку 01, 02, 03, ... переименовать изображение в thumb.jpg

ШАГ 2: создайте новый .txt, который содержит оригинальное имя папки.

file=${01}
cd ~/Desktop/TEST
(while read $file; do

    find . -type f -name "*300x250.jpg" 2>/dev/null | \
      (while read s; do
      IFS='/' read -ra FOLDERS <<< "$s"
      THUM=${s%.*}
      mkdir -p ~/Desktop/$file/
      cp "$s" ~/Desktop/$file/Thumb.jpg
      file=${01+1}
    done
   )
)

Пример:

TEST_FOLDER СОДЕРЖИТ

AD-123456-44 -> AD-123456-44_300x250.jpg

MT-333333-11 -> MT-333333-11_300x250.jpg

SA-222222-33 -> SA-222222-33_300x250.jpg

РЕЗУЛЬТАТЫ НА ЭТОМ НА СТОЛБЕ

01 -> AD-123456-44.txt - thumb.jpg

02 -> MT-333333-11.txt - thumb.jpg

03 -> SA-222222-33.txt - thumb.jpg

Пожалуйста, смотрите изображения ниже:

Starting

Ending Result

1 Ответ

0 голосов
/ 31 августа 2018

Я посмотрел ваш код и решил начать все сначала. На мой взгляд, вы сделали это более сложным, чем нужно. Вот мой код:

#!/bin/bash

sourcedir=~/SO/sourcedir
targetdir=~/Desktop/TEST

targetsubdir_counter=1

cd $sourcedir

for dir in $(find . -maxdepth 1 -type d -print | egrep -v "^\.$")
do
    cd $dir

    if [ $targetsubdir_counter -lt 10 ]
    then
        targetsubdir_name="0$targetsubdir_counter"
    else
        targetsubdir_name="$targetsubdir_counter"
    fi
    newdir="$targetdir/$targetsubdir_name"
    mkdir -p $newdir

    for file in "*300x250.jpg"
    do
        cp $file $newdir/thumb.jpg

        textfilename=$(echo $file | sed 's/\(.*\)_300x250.jpg$/\1.txt/')
        echo "$sourcedir/$dir" > $newdir/$textfilename
    done
    cd ..
    (( targetsubdir_counter = targetsubdir_counter + 1 ))
done
  • первый for проходит по всем каталогам в $sourcedir. find гарантирует, что обрабатываются только каталоги первого уровня. egrep -v удаляет текущий каталог (.).
  • целевой каталог создается в начале этого цикла.
  • имя целевого каталога рассчитывается из счетчика. Поскольку вы хотите иметь 0x, если x <10, это то, что делает <code>if.
  • второй for просматривает файлы, содержащие в своем имени "_300x250.jpg".
  • для каждого найденного файла он копирует его в «thumb.jpg»
  • и перекликается с исходным каталогом в файле ".txt". Имя этого файла вычисляется в предыдущей строке, используя sed.

Обратите внимание, что я использовал cp и примечание mv, так как я хотел сохранить каталог с исходным кодом без изменений. Я рекомендую вам сделать то же самое и удалять источник только после того, как вы будете удовлетворены результатами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...