Копирование в алфавитном порядке

Опубликовано 2 Сентября, 2008 под тегами BASh, player, BASh, Cheats

Обычно, копирование происходит в порядке отнюдь не алфавитном, а подряд по содержимому нода (я говорю про ФС ext3). Иногда это бывает не очень удобно, например, в случае с моим mp3-плеером (iRiver iFP-895), который упорно проигрывает содержимое директории в том порядке, в котором оно было записано. Ниже приведен однострочник, полностью копирующий результаты команды find в алфавитном порядке с сохранением структуры директорий.

find -type f -print0 | sort -z | cpio -0 -pd 

<new-dir> - директория, в которой будет воссоздана вся структура текущей. Однострочник использует программу cpio, изначально предназначенную для прямой работы с архивами. Ключ -p означает, что происходит копирование из директории в директорию, без архива, ключ -d “создает” все необходимые директории. Ключи find -print0 , sort -z и cpio -0 используются, чтобы список файлов раздерялся не новой строкой, а нулевым символом. В таком случае, имена файлов, содержащие перенос строки или подобное, будут нормально обработаны. Вызов sort, естественно, сортирует вывод find.

Связка find | cpio - достаточно интересный инструмент для копирования файлов. Так, например, можно скопировать только фотографии из одной директории (с учетом вложений) в другую:

find -iname *.jpg -print0 | cpio -0 -pd 

Вариантов - множество. Учитывая, что вывод find с успехом подвергается промежуточной обработке, практически бесконечное множество :)