Проделал пару операций после чего в папке с музыкой (2 691 объект) в некоторых именах файлов в начале появился пробел. Сидеть и удалять пробелы в ручную запарюсь. Может подскажете какуюнить команду для терминала чтобы быстренько это исправить? Заранее спасибо.
Как удалить пробел в начале имени файла
от это костыль [чешет репу задумчиво...] oO
#!/bin/bash
for i in *;
do
oldname=`basename "$i"`;
newname=`echo $oldname | sed 's/^[ ]//g'`;
if ! cmp "$oldname" "$newname" 2>/dev/null;
then
mv "$oldname" "$newname";
fi
done
http://linuxforum.ru/viewtopic.php?pid=245046#p245046
Вроде правильно работает.
perl-rename 's/^ //'
liaonau, объяснить не мешало бы, например в Gentoo надо установить dev-perl/rename.
$ perl-rename -n 's/ //g' ./*На самом деле не переименует, а только покажет как отработает, опция [-n].
ы. И, да
не сработает.perl-rename 's/^ //'
Проделал пару операций после чего в папке с музыкой (2 691 объект) в некоторых именах файлов в начале появился пробел. Сидеть и удалять пробелы в ручную запарюсь. Может подскажете какуюнить команду для терминала чтобы быстренько это исправить? Заранее спасибо.
что-то вроде
[console]find | sed -rn 's~^(.*)/\s+([^/]+)$~mv --backup "&" "\1/\2"~p'[/console]
(если понравится, поставьте после посл. буквы p букву e)
что-то вроде
доктор прокомментируй пожалуйста sed, а то шаманизм какой-то oO
find | sed -rn 's~^(.*)/\s+([^/]+)$~mv --backup "&" "\1/\2"~p'
sed может применяться для замены строк. например sed s~карова~корова~ меняет карову на корову.
мы ищем ^(.*)/\s+([^/]+)$
читается это так:
1. ^ с начала строки
2. (.*) любые символы в любом количестве
3. /\s+ слеш, а после него пробелы не менее 1.
4. ([^/]+) не менее одного любого символа кроме слеша (это имя файла без пробела в начале)
5. $ конец строки
Дальше меняем на mv --backup "&" "\1/\2", получается mv --backup "старое_имя" "новое_имя"
Не хочу создавать дубли тем, собственно вопрос таков, а как удалять пробелы в конце имени файла, как это сделать в файле я знаю, а вот как поступить с именем файла, что-то затрудняюсь придумать конструкцию.
Не хочу создавать дубли тем, собственно вопрос таков, а как удалять пробелы в конце имени файла, как это сделать в файле я знаю, а вот как поступить с именем файла, что-то затрудняюсь придумать конструкцию.
по следам доковского:
find | sed -rn 's~^(.*)/([^/]+)\s+$~mv --backup "&" "\1/\2"~p'
применять также с e.
по следам доковского:
find | sed -rn 's~^(.*)/([^/]+)\s+$~mv --backup "&" "\1/\2"~p'
применять также с e.
Ну ты прям К.О, вот я и не могу понять, как сделать так, что бы в конце строки, а точней имени файла пробелы удалялись.
Ну ты прям К.О, вот я и не могу понять, как сделать так, что бы в конце строки, а точней имени файла пробелы удалялись.
а я что написал? о_О
[added]
а... ну да... это только один пробел отрежет... надо подумать...
[added]
вот так вроде должно работать:
find | sed -rn 's~^(.*\S)\s+$~mv --backup "&" "\1/\2"~p'
Sysadmins tips and tricks
плохие там советы...
всё что с for'ом работать вообще не будет, писал их явно какой-то остолоп... и не стыдно от своего имени такое вывешивать? хоть проверил бы, перед тем как выкладывать...
..... а остальные не буду работать с пробелами на конце. кроме того для удаления пробелов только в начале/конце их тоже тривиально преобразовать не удастся (но можно)...
[quote="newzenon"]Sysadmins tips and tricks
плохие там советы...
всё что с for'ом работать вообще не будет, писал их явно какой-то остолоп... и не стыдно от своего имени такое вывешивать? хоть проверил бы, перед тем как выкладывать...
..... а остальные не буду работать с пробелами на конце. кроме того для удаления пробелов только в начале/конце их тоже тривиально преобразовать не удастся (но можно)...[/quote]
Можно вообще ничего не вывешивать и не делать ничего - ошибок еще меньше будет, и да когда писал проверял, умвр. Для обсуждений там ссылка есть в первом посте, есть более правильный совет так напиши.
Можно вообще ничего не вывешивать и не делать ничего - ошибок еще меньше будет, и да когда писал проверял, умвр. Для обсуждений там ссылка есть в первом посте, есть более правильный совет так напиши.
ладно... за остолопа извини... плохой день выдался...
я чего-то просмотрел переопределение IFS во второй строке... ИМХО не красиво, но имеет право на существование....
[quote="newzenon"]Можно вообще ничего не вывешивать и не делать ничего - ошибок еще меньше будет, и да когда писал проверял, умвр. Для обсуждений там ссылка есть в первом посте, есть более правильный совет так напиши.
ладно... за остолопа извини... плохой день выдался...
я чего-то просмотрел переопределение IFS во второй строке... ИМХО не красиво, но имеет право на существование....[/quote]
Принято. :)
Лучше если звезды лягут, свои пару постов в вышеобозначенную тему сделай.
find | sed -rn 's~^(.*\S)\s+$~mv --backup "&" "\1/\2"~p'
Сам то пробовал? В общем отвечу, так не работает. :-)
Сам то пробовал? В общем отвечу, так не работает. :-)
после восьмой правки того поста перестал работать. =)
find | sed -rn 's~^(.*\S)\s+$~mv --backup "&" "\1"~p'
[fixed]
напоминание себе: оно работает, не трогать!