Как бы скопировать рандомные mp3-шки в папку?

stm4836248

Для копирования всех мп3-шек можно заюзать вот такой скрипт:
rsync -rm -f "+ */" -f "+ **.mp3" -f "- *" /home/serw/Music /home/serw/mp3
Как его можно изменить, чтобы он копировал не все файлы, а только рандомные, желательно с ограничением на объем копируемых файлов (не более 7 ГБ, к примеру)?

stm4836248

В терминале ввел
chmod ugo+rwx '/home/serw/Downloads/fixedsize.py'
запустил из терминала скрипт, предварительно заменил 57-ую строку на
	fixedspace.py '/home/serw/Downloads/Music' '/home/serw/mp3' '5'	 

Файлы не копируются, в терминале вывод такой:
Traceback (most recent call last):
File "/home/serw/Downloads/fixedsize.py", line 85, in <module>
main(sys.argv[1:])
File "/home/serw/Downloads/fixedsize.py", line 59, in main
assert len(args) == 3, main.__doc__
AssertionError:
Usage:
fixedspace.py '/home/serw/Downloads/Music' '/home/serw/mp3' '5'

Щито делать?

nas1234

57 строчка это комментарий о том как использовать скрипт :facepalm:

istran

rsync не знаю, поэтому с cp:

#!/bin/bash

if ! [[ -d "$1" && -d "$2" && "$3" =~ ^[0-9]+$ ]]
then
echo "You are doing it wrong" >&2
exit 1
fi

find -L "$1" -name \*.mp3 -printf "%s:%p\n" | sort -R \
| awk -F: -v MS=$(($3 * 1024 * 1024)) \
'(size += $1) < MS { $1 = ""; printf "%s%c", substr($0, 2), 0; } ' \
| xargs -0 -I{FILE} cp {FILE} "$2"

Предполагается, что в именах файлов не встречается '\n'. Usage как у Федечки.

uncle17

Щито делать?
Для начала увидеть, что скрипт называется либо fixedspace, либо fixedsize. Уж одинаково назвать можно... И запустить его как питон, а не как шелл
З.Ы. И, да, питон нужен второй, а не третий. Под третьим не работает

stm4836248

rsync не знаю, поэтому с cp:
Пробовал запустить - скрипт копирует один рандомный файл и обзывает его /home/serw/mp3

istran

У тебя случайно не какой-нибудь BSD или Mac OS?
Была проблема одна в find — он не ходил по симлинкам. Но в остальном у меня работает отлично.

stm4836248

Да нет, Убунточка. Запускаю первый твой скрипт совершенно без изменений из терминала.

istran

Не знаю, у меня отлично работает (Ubuntu 14.04):

22:42:45 server [/tmp]
$ mkdir source dest
22:42:57 server [/tmp]
$ for i in $(seq 20); do cat /dev/urandom | head -c $(($RANDOM % 1000 * 1000)) > source/$i.mp3; done;
22:43:03 server [/tmp]
$ ls source/ -lh
total 10M
-rw-rw-r-- 1 nobody nobody 367K июля 13 22:43 10.mp3
-rw-rw-r-- 1 nobody nobody 723K июля 13 22:43 11.mp3
-rw-rw-r-- 1 nobody nobody 37K июля 13 22:43 12.mp3
-rw-rw-r-- 1 nobody nobody 623K июля 13 22:43 13.mp3
-rw-rw-r-- 1 nobody nobody 765K июля 13 22:43 14.mp3
-rw-rw-r-- 1 nobody nobody 125K июля 13 22:43 15.mp3
-rw-rw-r-- 1 nobody nobody 228K июля 13 22:43 16.mp3
-rw-rw-r-- 1 nobody nobody 323K июля 13 22:43 17.mp3
-rw-rw-r-- 1 nobody nobody 403K июля 13 22:43 18.mp3
-rw-rw-r-- 1 nobody nobody 639K июля 13 22:43 19.mp3
-rw-rw-r-- 1 nobody nobody 811K июля 13 22:43 1.mp3
-rw-rw-r-- 1 nobody nobody 429K июля 13 22:43 20.mp3
-rw-rw-r-- 1 nobody nobody 50K июля 13 22:43 2.mp3
-rw-rw-r-- 1 nobody nobody 560K июля 13 22:43 3.mp3
-rw-rw-r-- 1 nobody nobody 822K июля 13 22:43 4.mp3
-rw-rw-r-- 1 nobody nobody 697K июля 13 22:43 5.mp3
-rw-rw-r-- 1 nobody nobody 4,0K июля 13 22:43 6.mp3
-rw-rw-r-- 1 nobody nobody 911K июля 13 22:43 7.mp3
-rw-rw-r-- 1 nobody nobody 936K июля 13 22:43 8.mp3
-rw-rw-r-- 1 nobody nobody 688K июля 13 22:43 9.mp3
22:43:13 server [/tmp]
$ bash /tmp/test.sh source dest 5
22:43:20 server [/tmp]
$ ls -lh dest/
total 5,0M
-rw-rw-r-- 1 nobody nobody 367K июля 13 22:43 10.mp3
-rw-rw-r-- 1 nobody nobody 723K июля 13 22:43 11.mp3
-rw-rw-r-- 1 nobody nobody 37K июля 13 22:43 12.mp3
-rw-rw-r-- 1 nobody nobody 623K июля 13 22:43 13.mp3
-rw-rw-r-- 1 nobody nobody 125K июля 13 22:43 15.mp3
-rw-rw-r-- 1 nobody nobody 228K июля 13 22:43 16.mp3
-rw-rw-r-- 1 nobody nobody 403K июля 13 22:43 18.mp3
-rw-rw-r-- 1 nobody nobody 811K июля 13 22:43 1.mp3
-rw-rw-r-- 1 nobody nobody 429K июля 13 22:43 20.mp3
-rw-rw-r-- 1 nobody nobody 560K июля 13 22:43 3.mp3
-rw-rw-r-- 1 nobody nobody 697K июля 13 22:43 5.mp3

vipto


Пробовал запустить - скрипт копирует один рандомный файл и обзывает его /home/serw/mp3
Сначала создай папку.
mkdir /home/serw/mp3

stm4836248

Да, я уже до этого додумался. Теперь пробема такая, что скрипт копирует несколько файлов, а потом пишет
xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
и останавливается.

nas1234

xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
здесь ёбаный апостроф! но я могу проигнорировать его за $9.95 за флаг -0

istran

Поправил, см. первый ответ.

stm4836248

Я про однострочник говорил. Как смотрю, ты исправил не его. Тогда вопрос по твоему второму скрипту: как в него вставить аргументы '/home/serw/Music', '7000000000', '/home/serw/mp3'?

istran

Написано ведь
usage как у Федечки
 script.sh /home/serw/Music /home/serw/mp3 7000 

stm4836248

Все гениальное просто! А скрипт отлично работает, спасибо еще раз за него!

stm4836248

serw-System-Product-Name:~$ sh mp3.sh smb://192.168.1.2/music /home/serw/mp3 70
mp3.sh: 3: mp3.sh: [[: not found
mp3.sh: 3: mp3.sh: -d: not found
find: `smb://192.168.1.2/music': No such file or directory

С СМБ скрипт не будет работать?

carusya

Примонтируй

istran

и запускай в bash, а не в sh

stm4836248

Примонтировать - это просто предварительно открыть в Наутилусе и не закрывать или именно нужно какой-то алиас указать через mount, как в теме http://forum.ubuntu.ru/index.php?topic=64612.0 ?

istran

Вроде пишут, что Nautilus умеет монтировать smb шары. По ссылке перечислены пути монтирования в зависимости от версии Ubuntu: http://askubuntu.com/a/33513 .

stm4836248

Так не получилось. Курю варианты через cifs.

stm4836248

На убунтофоруме подсказали, как сделать копирование с сохранением структуры папок:

| xargs -0 -I{FILE} cp --parents {FILE} "$2"
Оставить комментарий
Имя или ник:
Комментарий: