LINUX.ORG.RU

Переместить файлы.

 , , ,


0

1

Есть N файлов. Нужно создать новые папки, в которые будут перемещены эти файлы по 1000 файлов в каждую папку.

Можете накидать bash скрипт? Вдруг у кого соображаловка хорошо работает.



Последнее исправление: der5ys7em (всего исправлений: 1)

Сессия вроде же закончилась. К чему это?

Но я уверен - если вы предложите $100 - $1000 (да что уж там - тут есть деятели предлагающие услуги аж за баснословные 20р/час, но боюсь вас с их решениями могут и отчислить) - желающие найдутся…

bugfixer ★★★★
()
Ответ на: комментарий от der5ys7em

а мне в обиходе требуется такой скрипт.

Расскажите поподробнее, плз. А то мне сложно представить зачем может понадобиться резать именно по тысяче файлов, без всяческих дополнительных ограничений (привязке к какому-нибудь hash’у итд).

bugfixer ★★★★
()
Ответ на: комментарий от bugfixer

Хорошо, расскажу. Есть много фотографий. Пользуюсь просмотрщиком Gwenview. Когда несколько десятков тысяч файлов в одной папке, просмотрщик очень долго превьюшки генерит. А когда в папке тысяча-две фотографии, то приемлемо.

der5ys7em
() автор топика
Ответ на: комментарий от der5ys7em

Хорошо, расскажу. Есть много фотографий. Пользуюсь просмотрщиком Gwenview. Когда несколько десятков тысяч файлов в одной папке, просмотрщик очень долго превьюшки генерит. А когда в папке тысяча-две фотографии, то приемлемо.

Ну может их тогда не тупо ровно по 1000 сортировать, а с хоть каким-нибудь смыслом? Например, по дате. Не? Ну там, отдельный каталог на каждый месяц, например. Или по сколько там выходит.

CrX ★★★
()
Последнее исправление: CrX (всего исправлений: 1)
Ответ на: комментарий от der5ys7em

Может Вы хотите к датам привязаться? Ie раскидать по YYYY/MM (например)? Это бы хоть какой-то практический смысл имело. Причём в идеале даты можно из exif выгрызать…

bugfixer ★★★★
()
Ответ на: комментарий от der5ys7em

Я уверен, помощь придёт, но в такой постановке - скучновато, могут быть проблемы с мотивацией потенциальных исполнителей.

ПыСы. А почему именно shell? Я бы такое на perl’е писал. Тривиально делается. Главное про «хвост» не забыть.

bugfixer ★★★★
()

Спасибо ребятам за вдохновление. Почитал западные форумы, и успешно заколхозил вот такое. Сработало.

#!/bin/bash dea=$(find ./ -maxdepth 1 -type f | wc -l) cycles=$(( dea / 1000 )) for ((k=0;k<=cycles;k++)); do dername=$(cat /dev/urandom | tr -dc ‘a-zA-Z0-9’ | fold -w 4 | head -n 1) mkdir ./«$dername» find . -maxdepth 1 -name ‘*.jpg’ | head -n 1000 | xargs -d $‘\n’ > mv -t ./«$dername» done

der5ys7em
() автор топика
Последнее исправление: der5ys7em (всего исправлений: 1)

покуда пил кофе :

package require uuid
proc generate_preview { dir } {
  set owd [ pwd ]
  cd $dir
  exec -ignorestderr -- magick montage -label '%f'  *.jpeg \
          -tile x1 --shadow -geometry '60x60+2+2>'  \
          preview.jpeg
  cd $owd
}
set stride 1000
set list [ glob -nocomplain -types f -- {*.[Jj][Pp][Ee][Gg]} ]
set total [ llength $list ]
set maps {}
for {set n 0 } { $n < $total } { incr n } {
   set name [ lindex $list $n ]
   set dir [ expr int(n/$stride) ]
   if { $n % $stride == 0 && ! [ file exists $dir ] } {
      file mkdir $dir
   } 
   set oid [ uuid::uuid generate ]
   set target [ file join $dir ${oid}.jpeg ]
   file rename -- $name $target
   if { $n % $stride == $stride - 1 } {
      generate_preview $dir
   }
   lappend maps [ list $name $target ]
}
if { [ info exists dir ] && ( $n % $stride != $stride - 1 ) } {
   generate_preview $dir
}
puts [ join $maps \n ]

MKuznetsov ★★★★★
()