Относительно всего Unixes я не думаю, что это выполнимо.
Обычные внешние шины сегодня не используют фиксированную нумерацию для своих портов, как IDE сделал. Так, для единственных остающихся источников данных для отображения Вас нужно, названия производителя дисков, их порядковые номера или UIDs разделов.
Имена производителя не обязательно уникальны на данной машине (предположите подключение двух внешних дисков от того же ряда - они определят тождественно). Порядковые номера не "видимы с внешней стороны", как раздел UIDs.
Так, о единственном универсальном решении я могу думать, должен маркировать физические диски порядковым номером и использовать команду udevadm, данную в ответе rozcietrzewiacz, если UDEV доступен.
Нет единственной команды для всего; в этом суть наличия scriptable оболочки.
while read -r old new; do
mv "$old.png" "$new.png"
done < map.txt
Без sed можно сделать замены как это в ударе:
for line in $(< patterns) ; do echo "Pattern: " $line " char: " ${line/=>*/} " nr: " ${line/*=>/}; done
('шаблоны' были бы файлом с => 1 и так далее), который приводит к:
for line in $(< patterns) ; do
c=${line/=>*/}
n=${line/*=>/}
mv $c.png $n.png
done
Страница справочника удара перечисляет это и другой, интересные опции под 'строковой заменой'.
Возможно, жемчуг rename
интересная опция также. Это позволяет массовые переименования с шаблонами, как
rename 's/^a/1/' a*png
На человечности это идет с perl-пакетом, afaik.
Это - один путь с жемчугом:
cat mapfile | perl -e 'my$h={eval join(",",<>)};while (($k,$v)=each%$h){`mv $k.png $v.png`}'
Вторая попытка:
perl -nle '(@a=map{s/^\s+//;s/\s+$//;s/'/\\'/g;$_}split/\s*=>\s*/,$_,2)and`mv \'$a[0].png\' \'$a[1].png\'`'
Работы с:
Someone's $tupid file name => renamed by "simple" script?!
eval
'луг вход, для eval'ing barewords на правой стороне =>
, и для использования `mv`
вместо безопасного от пробела переименовывают ().
– user1686
28.04.2011, 20:58
perl -nle 'my ($old, $new) = split /=>/; rename "$old.png", "$new.png"' mapfile
. Другое преимущество предотвращения оценки состоит в том, что можно на самом деле изменить шаблон, как вопрос указывает, может быть необходимым.
– Steven D
28.04.2011, 21:20
perldoc rename
: Поведение этой функции варьируется дико в зависимости от Вашего внедрения систем. Например, это не будет обычно работать через границы файловой системы, даже при том, что система mv команда иногда компенсирует это. Другие ограничения включают, работает ли это над каталогами, открытыми файлами или существующими ранее файлами. Проверьте perlport и или переименовывание (2) страница справочника или эквивалентная документация по системе для деталей. [шахта курсива]
– Axeman
28.04.2011, 21:22
File::Copy
скопировать или переместить файлы во всех кроме старинных версий Perl.
– Gilles 'SO- stop being evil'
28.04.2011, 22:33
renamefilesfrommappingfile() { local old new; while read -r old new; do mv "$old" "$new"; done < "$1"; }
– user1686 28.04.2011, 20:52