Линуксовое
Jun. 4th, 2010 08:05 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Уткнулся в шизу, которая мне в линуксе по жизни была малопонятна всегда.
Есть, предположим, 1000 файлов в папке. Из них 100 нужно перенести в другую папку, за исключением нескольких, причем критерий выбора этих 100 и пропускаемых из них нескольких в лучшем случае формулируется "содержит заданную подстроку в имени", а в худшем "выбираются вручную".
Вот как бы это сделать из командной строки, потому что очевидное решение "запустить mc, выделить руками и перенести" выглядит виндоюзерским читерством :)
Файлы с пробелами и прочими жыдосимволами в именах, поэтому приходится делать -print0
find . -maxdepth 1 -name "*.mkv" -print0 | xargs -0 mv {} итд итп
Походу, пока писал поцст в ЖЖ, уже нашел как сделать: нужно скомбинировать условия в find операторами:
find . -maxdepth 1 -name "*.mkv" ! -iname "*clowns*" ! -iname "*mimes*" -print0 | xargs -0 mv {} NotAboutClowns/
PS: от жеж хитрожопие - оно ему еще и параметры передает сразу все, нужно целевую папку указывать до остальных параметров: mv -t NotAboutClowns/
Есть, предположим, 1000 файлов в папке. Из них 100 нужно перенести в другую папку, за исключением нескольких, причем критерий выбора этих 100 и пропускаемых из них нескольких в лучшем случае формулируется "содержит заданную подстроку в имени", а в худшем "выбираются вручную".
Вот как бы это сделать из командной строки, потому что очевидное решение "запустить mc, выделить руками и перенести" выглядит виндоюзерским читерством :)
Файлы с пробелами и прочими жыдосимволами в именах, поэтому приходится делать -print0
find . -maxdepth 1 -name "*.mkv" -print0 | xargs -0 mv {} итд итп
Походу, пока писал поцст в ЖЖ, уже нашел как сделать: нужно скомбинировать условия в find операторами:
find . -maxdepth 1 -name "*.mkv" ! -iname "*clowns*" ! -iname "*mimes*" -print0 | xargs -0 mv {} NotAboutClowns/
PS: от жеж хитрожопие - оно ему еще и параметры передает сразу все, нужно целевую папку указывать до остальных параметров: mv -t NotAboutClowns/
no subject
Date: 2010-06-04 09:02 pm (UTC)no subject
Date: 2010-06-04 09:10 pm (UTC)Я стараюсь пользоваться командной строкой, это в некотором роде удобнее mc.
no subject
Date: 2010-06-04 09:18 pm (UTC)no subject
Date: 2010-06-04 11:03 pm (UTC)no subject
Date: 2010-06-04 11:26 pm (UTC)echo *
` и вперёд!no subject
Date: 2010-06-06 01:44 am (UTC)no subject
Date: 2010-06-07 01:32 am (UTC)cd
иmc
в два раза.no subject
Date: 2010-06-04 09:42 pm (UTC)no subject
Date: 2010-06-04 10:38 pm (UTC)no subject
Date: 2010-06-04 10:41 pm (UTC)no subject
Date: 2010-06-05 03:33 am (UTC)no subject
Date: 2010-06-04 11:57 pm (UTC)В маковской версии xargs можно сделать так:
ls -1 | grep .... | xargs -I % mv %
no subject
Date: 2010-06-05 10:47 am (UTC)no subject
Date: 2010-06-06 12:27 am (UTC)~/ > touch messy\ name
~/ > ls -l `ls messy*`
ls: messy: No such file or directory
ls: name: No such file or directory
[1] 5756 exit 1 ls -G -l `ls messy*`
no subject
Date: 2010-06-05 05:52 am (UTC)no subject
Date: 2010-06-05 07:26 am (UTC)no subject
Date: 2010-06-05 04:38 pm (UTC)cp $(pick *.txt) /kuda/to
или там
find /.../... | pick | xargs ...
Берёт список либо с ком. строки, либо со стандартного ввода, показывает диалог, там галочками отмечаем чо надо, на выводе даёт только отмеченные строки.
no subject
Date: 2010-06-06 10:38 am (UTC)кавычки вокруг {} хэндлят пробелы и червей, \; - конец команды. этот вариант кошерен тем, что в случае если подходящих файлов - пара миллионов - то ваш mv грохнется из-за переполнения буфера командной строки или числа параметров, а мой - нет.
да, я встречал необходимость мувнуть два миллиона файлов, это реальная ситуация.
да, на каждый файл будет рожаться свой mv, так что возможно будет чуть-чуть медленнее.
no subject
Date: 2010-06-06 10:44 am (UTC)no subject
Date: 2010-06-07 05:04 pm (UTC)no subject
Date: 2010-06-06 01:34 pm (UTC)no subject
Date: 2010-06-06 03:10 pm (UTC)