Перемещение последовательного диапазона нумерованных файлов в новые каталоги

Crashplan выполнит резервное копирование всех ваших системных файлов и данных и позволит вам восстановить их - либо на вашем текущем ПК, либо разрешить использовать его для другой установки.

Вы можете выполнить резервное копирование в свою онлайн-систему , другой компьютер или любой подключенный жесткий диск.

0
задан 11 May 2018 в 20:54

4 ответа

Что-то вроде этого маленького скрипта должно сделать это за вас:

#!/bin/bash files=(*.dpx) folder=1 count=0 if [ ! -d "folder$folder" ]; then mkdir "folder$folder" fi for i in "${files[@]}" do mv "$i" "folder$folder" let count=$count+1 if [ "$count" == "20000" ]; then let count=0 let folder=$folder+1 if [ ! -d "folder$folder" ]; then mkdir "folder$folder" fi fi done

Поместите скрипт в файл внутри папки с файлами, которые вы хотите переместить (например, папка в вашей домашней папке с именем «мой -files ") и назовите файл« move ». Затем из командной строки:

$ cd ~/my-files $ chmod 755 move $ ./move
2
ответ дан 17 July 2018 в 14:34

Если это одноразовая задача, вы можете использовать расширение оболочки следующим образом:

mkdir subdir1 subdir2 subdir3 subdir4 mv sb_604_dpm_{0089000..0108999}.dpx subdir1 mv sb_604_dpm_{0109000..0128999}.dpx subdir2 mv sb_604_dpm_{0129000..0148999}.dpx subdir3 mv sb_604_dpm_*.dpx subdir4

{1..5} расширяется до 1 2 3 4 5, поэтому приведенные выше команды расширяются до первой / второй / третьей 20 000 файлов, а последняя строка обрабатывает остальные.

3
ответ дан 17 July 2018 в 14:34

Что-то вроде этого маленького скрипта должно сделать это за вас:

#!/bin/bash files=(*.dpx) folder=1 count=0 if [ ! -d "folder$folder" ]; then mkdir "folder$folder" fi for i in "${files[@]}" do mv "$i" "folder$folder" let count=$count+1 if [ "$count" == "20000" ]; then let count=0 let folder=$folder+1 if [ ! -d "folder$folder" ]; then mkdir "folder$folder" fi fi done

Поместите скрипт в файл внутри папки с файлами, которые вы хотите переместить (например, папка в вашей домашней папке с именем «мой -files ") и назовите файл« move ». Затем из командной строки:

$ cd ~/my-files $ chmod 755 move $ ./move
2
ответ дан 20 July 2018 в 14:38
  • 1
    +1 Потому что это более гибко, чем мое жестко запрограммированное предложение . Он мог бы быть немного медленным, потому что mv называется 78 160 раз (вместо 4 раз). Но старое правило гласит: не оптимизируйте перед профилированием. – PerlDuck 11 May 2018 в 21:15
  • 2
    Из любопытства я только что измерил: 1) создает файлы 20k: touch sb_604_dpm_{0089000..0108999}.dpx 2) перемещается один за другим: time for i in sb_604_dpm_{0089000..0108999}.dpx; do mv $i subdir1/; done дает 25 секунд. 3) перемещается все сразу: time mv sb_604_dpm_{0089000..0108999}.dpx subdir1/ дает 0.4 секунды. Но все же: если это одноразовая задача, мне все равно. Я просто потратил больше времени на диагностику, чем на самом деле. – PerlDuck 11 May 2018 в 21:30
  • 3
    Это не самое быстрое решение, но оно работает;) – Joshua Besneatte 11 May 2018 в 21:31
  • 4
    Благодарю вас, Джошуа. Извините, что задал основной вопрос, но как реализовать этот скрипт ...? В DOS я просто использовал его для сохранения в виде пакетного файла и двойного щелчка - что эквивалентно Linux? – rich 11 May 2018 в 21:47

Если это одноразовая задача, вы можете использовать расширение оболочки следующим образом:

mkdir subdir1 subdir2 subdir3 subdir4 mv sb_604_dpm_{0089000..0108999}.dpx subdir1 mv sb_604_dpm_{0109000..0128999}.dpx subdir2 mv sb_604_dpm_{0129000..0148999}.dpx subdir3 mv sb_604_dpm_*.dpx subdir4

{1..5} расширяется до 1 2 3 4 5, поэтому приведенные выше команды расширяются до первой / второй / третьей 20 000 файлов, а последняя строка обрабатывает остальные.

3
ответ дан 20 July 2018 в 14:38
  • 1
    Это было быстро - спасибо PerlDuck! – rich 11 May 2018 в 21:45
  • 2
    +1, потому что ОП будет с большей вероятностью понимать это, чем нечто более необычное. – Sebastian Stark 12 May 2018 в 00:05

Другие вопросы по тегам:

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