|
| Masseomdøbning af filer Fra : Thomas D |
Dato : 29-05-03 00:21 |
|
Hej,
Jeg har et dir med en masse filer som stammer fra en workstation med et
andet styresystem(et hvor man ska sælge sin sjæl for at bruge det eller
noget i den retning).
Mange af filerne hedder noget i stil med:
"Langt Filnavn med mellemrum.txt"
Jeg vil så gerne rename alle filerne til noget i stil med:
"lang_filnavn_med_mellemrum.txt"
Altså jeg vil
- Erstatte upper case begyndelsesbogstaver (eller måske alle store
bogstaver, har lidt brug for at ku begge dele) med lower case.
- Erstatte space med underscore.
Er det noget mv og sed s/\ /_/g jeg skal kombinere?
Er lidt lost her, men håber at det kan lade sig gøre?
Mvh
Thomas
| |
Topper (29-05-2003)
| Kommentar Fra : Topper |
Dato : 29-05-03 07:31 |
|
> Mange af filerne hedder noget i stil med:
> "Langt Filnavn med mellemrum.txt"
>
> Jeg vil så gerne rename alle filerne til noget i stil med:
> "lang_filnavn_med_mellemrum.txt"
>
> Altså jeg vil
> - Erstatte upper case begyndelsesbogstaver (eller måske alle store
> bogstaver, har lidt brug for at ku begge dele) med lower case.
> - Erstatte space med underscore.
>
> Er det noget mv og sed s/\ /_/g jeg skal kombinere?
>
Jeg har ikke helt styr på lowercase tingen endnu men du kan starte med at
kigge på dette:
Jeg tror at du skal bruge noget ala dette (måske ploppet i et shellscript)
#find gruppen af filer du vil have omdøbt
filer=`find . -name '*.txt* -print`
#iterér gennem gruppen
for fil i $filer ; do
# generer filens nye navn
nytnavn=`echo $fil | sed s/\ /_/g`
# flyt/omdøb filen
mv $fil $nytnavn
done
Torben
| |
Peter Jensen (29-05-2003)
| Kommentar Fra : Peter Jensen |
Dato : 29-05-03 09:52 |
|
Topper wrote:
>> Mange af filerne hedder noget i stil med:
>> "Langt Filnavn med mellemrum.txt"
>>
>> Jeg vil så gerne rename alle filerne til noget i stil med:
>> "lang_filnavn_med_mellemrum.txt"
>
> #find gruppen af filer du vil have omdøbt
> filer=`find . -name '*.txt* -print`
>
> #iterér gennem gruppen
> for fil i $filer ; do
Vil der så ikke netop komme problemer med mellemrummene i filnavnene?
Jeg mener at 'for' deler ved alle whitespaces, og ikke kun newline.
<checker lige> ... Jep. På mit system vil det fejle.
> # generer filens nye navn
> nytnavn=`echo $fil | sed s/\ /_/g`
>
> # flyt/omdøb filen
> mv $fil $nytnavn
Hvilket har en lille chance for at overskrive en fil der allerede
findes, eller flytte filen over i et uønsket bibliotek. Jeg ville
anbefale at pakke den ind i en 'if' sætning, som her:
if [ ! -e $nytnavn ]
then
mv $fil $nytnavn
else
echo "Warning! $nytnavn already exists!"
fi
> done
--
PeKaJe
In a great romance, each person basically plays a part that the other
really likes. -- Elizabeth Ashley
| |
Topper (29-05-2003)
| Kommentar Fra : Topper |
Dato : 29-05-03 10:55 |
|
> Vil der så ikke netop komme problemer med mellemrummene i filnavnene?
> Jeg mener at 'for' deler ved alle whitespaces, og ikke kun newline.
> <checker lige> ... Jep. På mit system vil det fejle.
Du har ret
> Hvilket har en lille chance for at overskrive en fil der allerede
> findes, eller flytte filen over i et uønsket bibliotek. Jeg ville
> anbefale at pakke den ind i en 'if' sætning, som her:
Du har ret igen
Well hvad kan jeg sige til mit forsvar, udover at da jeg skrev mit indlæg
var jeg lige stået op og min hjerne var ikke færdig med at boote :)
Torben
| |
Kent Friis (29-05-2003)
| Kommentar Fra : Kent Friis |
Dato : 29-05-03 08:46 |
|
Den Thu, 29 May 2003 01:20:46 +0200 skrev Thomas D:
>Hej,
>
>Jeg har et dir med en masse filer som stammer fra en workstation med et
>andet styresystem(et hvor man ska sælge sin sjæl for at bruge det eller
>noget i den retning).
>Mange af filerne hedder noget i stil med:
>"Langt Filnavn med mellemrum.txt"
>
>Jeg vil så gerne rename alle filerne til noget i stil med:
>"lang_filnavn_med_mellemrum.txt"
>
>Altså jeg vil
> - Erstatte upper case begyndelsesbogstaver (eller måske alle store
>bogstaver, har lidt brug for at ku begge dele) med lower case.
> - Erstatte space med underscore.
>
>Er det noget mv og sed s/\ /_/g jeg skal kombinere?
find . -maxdepth 1 | while read file
do
mv $file $(echo $file | tr " [:upper:]" "_[:lower:]");
done
Hvis du vil have subdirectories med, så fjern -maxdepth 1.
Bemærk " " og "_" før upper/lower.
Mvh
Kent
--
"Handlingen blev afbrudt pga. computerens begrænsede effekt"
- Windows NT på en Pentium III 550 MHz
| |
Peter Makholm (29-05-2003)
| Kommentar Fra : Peter Makholm |
Dato : 29-05-03 09:09 |
|
"Thomas D" <dinadur@hotmail.com> writes:
> Altså jeg vil
> - Erstatte upper case begyndelsesbogstaver (eller måske alle store
> bogstaver, har lidt brug for at ku begge dele) med lower case.
> - Erstatte space med underscore.
Som jeg svarede på sslug.novice så kan det gøres med rename(1) hvis
det er perl-udgaven. Se i manualsiden 'man rename' om den i SYNOPSIS
skriver noget med perlexpr.
--
Peter Makholm | One thing you do is prevent good software from
peter@makholm.net | being written. Who can afford to do professional
http://hacking.dk | work for nothing?
| -- Bill Gates
| |
Thomas D (29-05-2003)
| Kommentar Fra : Thomas D |
Dato : 29-05-03 10:29 |
|
> Som jeg svarede på sslug.novice så kan det gøres med rename(1) hvis
> det er perl-udgaven. Se i manualsiden 'man rename' om den i SYNOPSIS
> skriver noget med perlexpr.
Tak for svaret.
Dog kan jeg ikke se at der er kommet noget svar på sslug.novice.(?)
Mvh
Thomas
| |
Peter Makholm (29-05-2003)
| Kommentar Fra : Peter Makholm |
Dato : 29-05-03 17:03 |
| | |
|
|