Як перенести випадковий вибір каталогів із зовнішнього hd на ноутбук та вказати ліміт загальних даних


1

Мій ноутбук HD - це 120 ГБ SSD. У мене також є зовнішній HD з ТБ, який я використовував для зберігання музики, фотографій та відео. Мені подобається мати на своєму ноутбуці музику на випадок, якщо я хочу щось слухати, а у мене немає доступу до Інтернету (я зазвичай не ношу з собою зовнішній HD). Але якби у мене на комп’ютері була вся колекція музики, це зайняло б величезну частину мого вільного місця. Я хотів інструмент, який отримав випадковий вибір альбомів із мого зовнішнього HD та переніс їх у свою музичну колекцію на своєму ноутбуці. Для передачі хотілося б вказати лише максимальну кількість даних, які я хочу передати. Наприклад, я хотів би мати змогу вказати, дістати мені до 10 Гб випадкових альбомів з музичної колекції в моєму зовнішньому HD-файлі та помістити їх у музичний каталог мого ноутбука, усуваючи те, що раніше було доступне на моєму ноутбуці " s музичний каталог. Чи є інструмент, який може допомогти мені досягти цього? Це також було б корисно для передачі музики на мій смарт-телефон. PS Я користувач Ubuntu.

Відповіді:


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все, що завгодно.

Дякую! Я подумав, що, мабуть, просто закінчу робити сценарій Баша. Це дуже приємний початок, дякую.
tatsuhirosatou

1

Скористайтеся інструментом " Випадкове копіювання" .

Випадкова копія має три режими:

  • A file-based mode: звичайний режим створення музичної колекції з різних папок джерела.

  • A 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Позначає, скільки файлів буде скопійовано.


Це чудово виглядає, ви знаєте альтернативу Linux?
tatsuhirosatou

@climatewarrior: Оновлено мою відповідь. Я спробую створити сценарій, який це робить.
stderr
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.