Команда для копирования 20000 маленьких файлов в 40 разных каталогов

Самый безопасный способ, который я знаю, это:

  1. cd"где находятся ваши каталоги"
  2. Теперь используйте tar, чтобы сохранить их где-нибудь:tar -cvf"имя файла для сохранения, например, /tmp/mysavfil.tar" "имя всех каталогов, например, :foo bar и т. д.", чтобы получить:tar -cvf /tmp/mysavfil.tar foo bar
  3. Тогда сделайте:cd..
  4. Тогда:tar xvf /tmp/mysavfil.tar
  5. Опционально, если вы хотите удалить ненужные файлы следующим образом:cd"исходное место, где были ваши файлы"; rm -rf foo bar;rm /tmp/mysavefiltar
  6. Готово

Гораздо проще сделать:

  • mv foo bar../.
-1
25.10.2019, 20:56
1 ответ

Даже если мне не нравятся такого рода вопросы, когда очевидно, что вы просто немного не искали, прежде чем задать вопрос, вот начало решения:

for file in * ; do 
   dstdir=$(stat -c %X "${file}")
   if [ ! -d "${dstdir}" ]; then
       mkdir "${dstdir}"
   fi
   mv "${file}" "${dstdir}"
done

ОТРЕДАКТИРОВАНО С ПОЛНОСТЬЮ ИЗМЕНЕННЫМ ИСХОДНЫМ ВОПРОСОМ

i=0
dstdir=0
for file in *; do
  if [[ "$((i++))" -gt 10 ]] ; then
    dstdir=$((dstdir + 1))
  fi  
  if [ ! -d "${dstdir}" ] ; then
     mkdir ${dstdir}
  fi
  mv $file ${dstdir}/
done

Базовый алгоритм. Настройте тест iпод свои нужды. Напоминаем, что $(( ))— выполнять арифметические действия в bash (не уверен, что он совместим с sh)

2
28.01.2020, 05:08

Теги

Похожие вопросы