1

Мой ноутбук HD - 120 ГБ SSD. У меня также есть внешний HD ТВ, который я использовал для хранения своей музыки, фотографий и видео. Мне нравится слушать музыку на своем ноутбуке, если я хочу что-то послушать и у меня нет доступа к Интернету (обычно я не ношу с собой внешний HD). Но если бы на моем ноутбуке была вся моя музыкальная коллекция, это заняло бы огромную часть моего свободного места. Я хотел инструмент, который бы получал случайный выбор альбомов с моего внешнего HD и переносил их в мою музыкальную коллекцию на моем ноутбуке. Для передачи я хотел бы указать только максимальный объем данных, которые я хочу передать. Например, я хотел бы иметь возможность указать, взять мне случайные альбомы на 10 ГБ из музыкальной коллекции на внешнем жестком диске и поместить их в каталог музыки на моем ноутбуке, удаляя при этом то, что ранее было доступно в каталоге музыки на моем ноутбуке. Есть ли инструмент, который может помочь мне достичь этого? Это также было бы полезно для переноса музыки на мой смартфон. PS Я пользователь Ubuntu.

2 ответа2

1

Используйте инструмент Random Copy.

Случайная копия имеет три режима:

  • file-based mode: обычный режим для создания музыкальной коллекции из разных исходных папок.

  • directory-based Mode: для создания музыкальной коллекции, также основанной на разных исходных каталогах, но в отличие от режима на основе файлов, копируется полное содержимое каталога.

  • CD-based Mode: особый режим, подходящий для компакт-диска или DVD-диска с песнями, поэтому остается меньше места. Файлы назначения могут быть исходными или волновыми файлами после внутреннего преобразования.

Альтернативный Linux

Один вариант будет для Linux Mix2Stix.

Шаги для установки и как использовать, это описано на странице.

Примечание: Mix2Stix требует Java, который должен быть установлен в системе.Источник включен в дистрибутив.


Использование команды find/cp

find -L ~ -type f -name "*.mp3" | sort -R | tail -n50 | while read file; do cp "$file" /media/<yourdisk>; done

Команда find будет искать mp3-файлы в вашей папке пользователя ~ . -n50 представляет, сколько файлов будет скопировано.

1

Пока вам не нужно ровно 10 ГБ данных, примерно 10 ГБ, но не более, вы можете написать функцию bash, которая делает это. Добавьте эти строки в ваш файл $HOME/.bashrc :

function random_copy(){
    size=0; 
    tries=0;
    dirs=(); 
  ## The maximum size, change this to whatever you want
    limit=10000000
  ## The maximum number of times we will try to get 
  ## another dir if the current one is too big.
    maxtries=20
  ## While we have not reached the size limit
    while [[ $size -lt $limit ]] ; do 
  ## Find a random, non-empty directory from the source. 
  ## sort -R does a  random sort and head -n 1 prints the first line.
    dir="$(find $1/*/  -not -empty -type d | sort -R | head -n 1)"
  ## Get this dir's size
    dsize=$(du -s "$dir" | cut -f 1)
  ## If this dir does not make us pass the limit
    if [[  $((size + $dsize)) -le $limit ]]; then
        echo "Copying $dir" 1>&2
    ## Copy it to target
        cp -r "$dir" $2
    ## Add its size to $size
        let size+=$dsize
  ## If this dir makes us pass the limit
  ## try $maxtries times to find another that does not
    else
        let tries++;
        if [[ $tries -gt $maxtries ]]; then
        echo "" 1>&2;
        echo "Final size =  $size"
        break;
        fi
    fi
    done; 
}

Затем вы можете вызвать функцию, запустив

random_copy /path/to/source /path/to/destination

Например

random_copy ~/Music /tmp/music

ЗАМЕТКИ

  • Функция будет искать папки , которые находятся в директории источника. Я предполагаю, что каждый из ваших альбомов находится в отдельной папке.
  • Фактический размер, который вы получите, будет отличаться при каждом запуске функции. Если определенный каталог пропустит ограничение размера, он будет пытаться снова, пока не будет достигнут $maxtries . Вы можете контролировать это, изменяя maxtries=20 на то, что вы хотите.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .