LinuxForum.Fans
Тема

Как удалить пробел в начале имени файла

Автор: addison 20 сообщений 10306 просмотров
#223643

Проделал пару операций после чего в папке с музыкой (2 691 объект) в некоторых именах файлов в начале появился пробел. Сидеть и удалять пробелы в ручную запарюсь. Может подскажете какуюнить команду для терминала чтобы быстренько это исправить? Заранее спасибо.

#223644

addison, проще всего установить, если не установлена, специально для этого предназначенную программу — rename.

#223668

от это костыль [чешет репу задумчиво...] oO

text

#!/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
#224275

perl-rename 's/^ //'

#224277

liaonau, объяснить не мешало бы, например в Gentoo надо установить dev-perl/rename.

text
$ perl-rename -n 's/ //g' ./*

На самом деле не переименует, а только покажет как отработает, опция [-n].

ы. И, да

liaonau написал:
perl-rename 's/^ //'
не сработает.
#224289
addison написал:
Проделал пару операций после чего в папке с музыкой (2 691 объект) в некоторых именах файлов в начале появился пробел. Сидеть и удалять пробелы в ручную запарюсь. Может подскажете какуюнить команду для терминала чтобы быстренько это исправить? Заранее спасибо.

что-то вроде
[console]find | sed -rn 's~^(.*)/\s+([^/]+)$~mv --backup "&" "\1/\2"~p'[/console]
(если понравится, поставьте после посл. буквы p букву e)

#224308
drBatty написал:
что-то вроде

доктор прокомментируй пожалуйста sed, а то шаманизм какой-то oO

#224430
drBatty написал:
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 "старое_имя" "новое_имя"

#258974

Не хочу создавать дубли тем, собственно вопрос таков, а как удалять пробелы в конце имени файла, как это сделать в файле я знаю, а вот как поступить с именем файла, что-то затрудняюсь придумать конструкцию.

#258978
"i2ks" написал:
Не хочу создавать дубли тем, собственно вопрос таков, а как удалять пробелы в конце имени файла, как это сделать в файле я знаю, а вот как поступить с именем файла, что-то затрудняюсь придумать конструкцию.

по следам доковского:
find | sed -rn 's~^(.*)/([^/]+)\s+$~mv --backup "&" "\1/\2"~p'
применять также с e.

#258979
"Fat-Zer" написал:
по следам доковского:
find | sed -rn 's~^(.*)/([^/]+)\s+$~mv --backup "&" "\1/\2"~p'
применять также с e.

Ну ты прям К.О, вот я и не могу понять, как сделать так, что бы в конце строки, а точней имени файла пробелы удалялись.

#258981
"i2ks" написал:
Ну ты прям К.О, вот я и не могу понять, как сделать так, что бы в конце строки, а точней имени файла пробелы удалялись.

а я что написал? о_О
[added]
а... ну да... это только один пробел отрежет... надо подумать...
[added]
вот так вроде должно работать:
find | sed -rn 's~^(.*\S)\s+$~mv --backup "&" "\1/\2"~p'

#258989
"newzenon" написал:
Sysadmins tips and tricks

плохие там советы...
всё что с for'ом работать вообще не будет, писал их явно какой-то остолоп... и не стыдно от своего имени такое вывешивать? хоть проверил бы, перед тем как выкладывать...
..... а остальные не буду работать с пробелами на конце. кроме того для удаления пробелов только в начале/конце их тоже тривиально преобразовать не удастся (но можно)...

#258993
Fat-Zer написал:
[quote="newzenon"]Sysadmins tips and tricks

плохие там советы...
всё что с for'ом работать вообще не будет, писал их явно какой-то остолоп... и не стыдно от своего имени такое вывешивать? хоть проверил бы, перед тем как выкладывать...
..... а остальные не буду работать с пробелами на конце. кроме того для удаления пробелов только в начале/конце их тоже тривиально преобразовать не удастся (но можно)...[/quote]
Можно вообще ничего не вывешивать и не делать ничего - ошибок еще меньше будет, и да когда писал проверял, умвр. Для обсуждений там ссылка есть в первом посте, есть более правильный совет так напиши.

#258995
"newzenon" написал:
Можно вообще ничего не вывешивать и не делать ничего - ошибок еще меньше будет, и да когда писал проверял, умвр. Для обсуждений там ссылка есть в первом посте, есть более правильный совет так напиши.

ладно... за остолопа извини... плохой день выдался...
я чего-то просмотрел переопределение IFS во второй строке... ИМХО не красиво, но имеет право на существование....

#259000
Fat-Zer написал:
[quote="newzenon"]Можно вообще ничего не вывешивать и не делать ничего - ошибок еще меньше будет, и да когда писал проверял, умвр. Для обсуждений там ссылка есть в первом посте, есть более правильный совет так напиши.

ладно... за остолопа извини... плохой день выдался...
я чего-то просмотрел переопределение IFS во второй строке... ИМХО не красиво, но имеет право на существование....[/quote]
Принято. :)
Лучше если звезды лягут, свои пару постов в вышеобозначенную тему сделай.

#259002
"Fat-Zer" написал:
find | sed -rn 's~^(.*\S)\s+$~mv --backup "&" "\1/\2"~p'

Сам то пробовал? В общем отвечу, так не работает. :-)

#259048
"i2ks" написал:
Сам то пробовал? В общем отвечу, так не работает. :-)

после восьмой правки того поста перестал работать. =)
find | sed -rn 's~^(.*\S)\s+$~mv --backup "&" "\1"~p'
[fixed]
напоминание себе: оно работает, не трогать!

Войдите или зарегистрируйтесь, чтобы ответить.