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