Mellanslag i katalognamn

Här ställer ni allmäna frågor kring Slackware Linux

Moderatorer: Nille, nomicon, Minime

hakan
Hedersmedlem
Inlägg: 811
Blev medlem: 15 okt 2003 06:31
ORT: Lidingö

Mellanslag i katalognamn

Inlägg av hakan »

Sådant får man bl.a. när man tar musik från "Windowski". ;-)

När man har en massa sådana kataloger, kan man på något "enkelt sätt", d.v.s. med ett skript, ersätta mellanslag med ett uderstreck?

Kanske t.o.m. så att skriptet letar "neråt" och ersätter mellanslagen i filerna också?

/Håkan
Användarens profilbild
Minime
Labrat
Inlägg: 690
Blev medlem: 14 okt 2005 14:27
ORT: Loos

Re: Mellanslag i katalognamn

Inlägg av Minime »

Går nog att skriva i perl, dock kan jag inte perl personligen tyvärr...
Alternativt kan jag tänka mig att det går det att skriva ett shell skript.
Efter några minuters googlande hittade jag några alternativ.

Shell Scripts Exempel:

Kod: Markera allt

#! /usr/bin/bash
for file in *\ *;
do
mv "$file" "${file// /_}"
done
Saxat från "http://cognitiveatrophy.blogspot.com/20 ... paces.html"

Perl script exempel:

Kod: Markera allt

#!/usr/bin/perl -w
# nospace /this/dir /that/dir /those/too

use File::Find;
use strict;
die "usage: nospace dir[s]\n" unless @ARGV;

my %ext;

find(\&remspaces, @ARGV);

sub remspaces {
return if ($_ eq '.');
return if ($_ eq '..');
(my $new = $_) =~ tr/a-zA-Z0-9_.-/_/c;
my $duplicate = ($new ne $_ and -e $new);
my $try = $new;

$ext{"$File::Find::dir/$try"}++ if $duplicate;

while (my $count = $ext{"$File::Find::dir/$new"}++) {
(my $with_num = $new) =~ s/(?=\.|$)/_$count/;
$new = $with_num, last if not -e $with_num;
}

$ext{"$File::Find::dir/$try"}-- if $duplicate;

rename $_ => $new
or warn "can't rename $_ to $new: $!";
}
Saxat från "http://www.pigstye.net/2006/09/18/perl- ... -dir-names"

/Minime

Raspberry Pi 4B 4 Gb RAM Slackware Arm 15.0
Server EeeBox Atom 1.6 GHz 1.5 Gb RAM Slackware 15.0 x64bit
Asus Rog Strix AMD Ryzen 5 3.6 GHz 16 Gb RAM Slackware 15.0 multilib
Miraclebox Premium Twin HD - Openvix 5.2.040 (Neotion CI+ CA-modul)
Användarens profilbild
Nille
Guru
Inlägg: 1475
Blev medlem: 17 jun 2004 02:41

Re: Mellanslag i katalognamn

Inlägg av Nille »

Borde gå att göra ett enkelt bash skript för det, funderar på tr eller awk.
Nu är jag lite för trött för att tänka rätt men om det regnar imorgon så ska jag nog kunna fixa ett skript.
The more linux you go the slacker you get.
hakan
Hedersmedlem
Inlägg: 811
Blev medlem: 15 okt 2003 06:31
ORT: Lidingö

Re: Mellanslag i katalognamn

Inlägg av hakan »

Tack! :D
Båda fungerar, det första är ju lite enklare och måste tas "katalog för katalog", men bra mycket snabbare än att använda ex.v. "krename" för att döpa om filer med om man bara ska ta bort mellanslag.

Perl-skriptet måste man modifiera så det inte tar bort å,ä,ö också, ändra rad 15 till...
(my $new = $_) =~ tr/a-öA-Ö0-9_.-/_/c;
..så fungerar det. Jag måste dock anropa det 2 ggr, första gången tar det "katalognamnen" och nästa gång även filerna....jag kallar skriptet "nospace.sh"...

Kod: Markera allt

titus:/media/disk $ nospace.sh Barnskivor2/
Can't cd to (Barnskivor2/) 100% Barn Vol 4: No such file or directory
 at /home/titus/bin/nospace.sh line 10
Can't cd to (Barnskivor2/) 100% Barn Vol 2: No such file or directory
 at /home/titus/bin/nospace.sh line 10.
..katalogerna har ju bytt namn så dom hittas inte...så en gång till...

Kod: Markera allt

titus:/media/disk $ nospace.sh Barnskivor2/
..så tas innehållet också.

Än en gång, tack för hjälpen! :D

/Håkan
Användarens profilbild
Nille
Guru
Inlägg: 1475
Blev medlem: 17 jun 2004 02:41

Re: Mellanslag i katalognamn

Inlägg av Nille »

Nu har jag inte testat men e lite piggare nu så kan tänka bättre :)
Borde det inte fungera med
rename "s/ /_/g" *
Men jag har inte testat det själv men tänkte att det måste vara lättast.
Glad midsommar allihop.
The more linux you go the slacker you get.