mv och regexp?
-
- Inlägg: 95
- Blev medlem: 18 nov 2007, 22:47
- OS: Ubuntu
- Utgåva: 18.04 Bionic Beaver LTS
- Ort: Huddinge / Stockholm / Sverige
- Kontakt:
mv och regexp?
Jag undrar hur man använder regexp och mv-kommandot. Håller mellanåt på att sortera musik och har Artistnamn - Låt om jag har färre än 20 låtar av artisten. Annars har jag dem i Artistnamn/Låt. Så när jag passerar gränsen för 20 låtar så vill jag enkelt flytta alla Artistnamn\ -\ * till Artistnamn/ så att låten bara har det efter bindestrecket i filnamnet. Hur gör man detta enkelt?
-
- Inlägg: 1269
- Blev medlem: 15 dec 2007, 03:20
- OS: Xubuntu
Re: mv och regexp?
Problematisering
1) Det räcker nog inte att gå efter första bindestrecket eftersom artistnamn kan ha bindestreck (ex "B-52s - Loveshack.mp3"). Bättre att gå efter första bindestreck omgivet av space (" - ") (även om det knaske inte heller är 100% säkert). Jag ska fundera en stund och återkommer.
2) Är det inte enklare alltid att ha två nivåer för alla artister, även de med mindre än 20 låtar? Då slipper man flytta ner dem när man får fler låtar och flytta upp dem när man får färre. Mer enhetligt och inte långsammare, troligen också mer överskådligt.
1) Det räcker nog inte att gå efter första bindestrecket eftersom artistnamn kan ha bindestreck (ex "B-52s - Loveshack.mp3"). Bättre att gå efter första bindestreck omgivet av space (" - ") (även om det knaske inte heller är 100% säkert). Jag ska fundera en stund och återkommer.
2) Är det inte enklare alltid att ha två nivåer för alla artister, även de med mindre än 20 låtar? Då slipper man flytta ner dem när man får fler låtar och flytta upp dem när man får färre. Mer enhetligt och inte långsammare, troligen också mer överskådligt.
-
- Inlägg: 1269
- Blev medlem: 15 dec 2007, 03:20
- OS: Xubuntu
Re: mv och regexp?
Sådär. En kommandorad att flytta ner filer, och en att flytta upp om du ångrar dig.David Andersson skrev:Jag ska fundera en stund och återkommer.
Ner
Flytta filer i aktuell katalog till en underkatalog. Filer matchande "x - y" kommer att heta x/y. Katalog x skapas om den inte finns. Om filen x/y redan finns så skrivs den inte över ("x - y" blir kvar).
Kod: Markera allt
ls -d Titiyo' - '* | sed 's/ - /\//' | while IFS=/ read x y; do mkdir -p "$x"; yes no | mv -i "$x - $y" "$x/$y"; done
Flytta filer från en underkatalog till aktuell katalog. Filer matchande x/y kommer att heta "x - y". Katalog x tas bort om den blev tom. Om filen "x - y" redan finns så skrivs den inte över (x/y blir kvar).
Kod: Markera allt
ls -d Titiyo/* | while IFS=/ read x y; do yes no | mv -i "$x/$y" "$x - $y"; rmdir --ignore-fail-on-non-empty "$x"; done
Förklaring
ls -d Om mönstret matchar kataloger så lista bara katalogens namn, inte innehåll. Resten av logiken bör då fungera "normalt". Dvs en katalog som heter "Titiyo - bildmapp" kommer att flyttas ner till "Titiyo/bildmapp". Eftersom alla matchar "borde vara" vanliga filer så behövs inte -d, men om det finns nån katalog som matchar så är det bättre att bearbeta det analogt än att bugga ur.
mv -i Fråga innan den skriver över en fil som redan existerar. Förväntar sig svaret "y" eller "yes". Allt som inte börjar "y" tolkas som "no".
yes no Skriv noll eller flera "no"
yes no | mv -i Skriv inte över en fil som redan existerar. Det visas en fråga i terminalen, men den ska man inte svara på manuellt.
mkdir -p Ge inget fel om katalogen inte finns (och skapa ev föräldrakataloger om de inte finns, men det använder vi oss inte av här).
IFS=/ read x y Läs en rad från standard in, dela up vid / och spara i variablerna x och y. Default IFS är att dela upp vid space (blank, tab, nyrad).
Katalog När jag säger katalog så menar jag det alla andra kallar mapp.
-
- Inlägg: 95
- Blev medlem: 18 nov 2007, 22:47
- OS: Ubuntu
- Utgåva: 18.04 Bionic Beaver LTS
- Ort: Huddinge / Stockholm / Sverige
- Kontakt:
Re: mv och regexp?
Tack, David! Ska läsa igenom och försöka förstå det hela.
Att ta bort låtar är inget som jag brukar göra. Då ska det vara någon riktigt dålig låt med bandet. Men skulle jag råka få 19 låtar med bandet då skulle jag nog inte bry mig. Den där 20-gränsen är inte strikt.
Nja. Det är nog enklare, men en del band har jag bara en enda låt med. Då tycker jag det känns onödigt att ge dem en egen mapp. Bara band jag tycker är tillräckligt bra ska få mapp, så de måste förtjäna det genom att jag har tillräckligt många låtar med dem.David Andersson skrev:2) Är det inte enklare alltid att ha två nivåer för alla artister, även de med mindre än 20 låtar? Då slipper man flytta ner dem när man får fler låtar och flytta upp dem när man får färre. Mer enhetligt och inte långsammare, troligen också mer överskådligt.
Att ta bort låtar är inget som jag brukar göra. Då ska det vara någon riktigt dålig låt med bandet. Men skulle jag råka få 19 låtar med bandet då skulle jag nog inte bry mig. Den där 20-gränsen är inte strikt.
-
- Inlägg: 95
- Blev medlem: 18 nov 2007, 22:47
- OS: Ubuntu
- Utgåva: 18.04 Bionic Beaver LTS
- Ort: Huddinge / Stockholm / Sverige
- Kontakt:
Re: mv och regexp?
Det fungerar inte riktigt. När jag ska flytta ner får jag felet/varningen
Kod: Markera allt
mv: kan inte ta status på "\033[01;32mMögel - Försök inte fly.ogg\033[00m": Filen eller katalogen finns inte
-
- Inlägg: 1269
- Blev medlem: 15 dec 2007, 03:20
- OS: Xubuntu
Re: mv och regexp?
Kan det möjligtvis vara så att du i .profile eller .bashrc har definierat en alias eller shell-funktion för ls som lägger till flaggan --color? I så fall ändra till --color=auto eller ta bort aliasen helt.Jojan skrev:Det fungerar inte riktigt. När jag ska flytta ner får jag felet/varningenKod: Markera allt
mv: kan inte ta status på "\033[01;32mMögel - Försök inte fly.ogg\033[00m": Filen eller katalogen finns inte
(Man ska vara försiktig med att definiera om standardprogram. Om beteendet ändrats på ett signifikant sätt bör man definiera den med ett nytt namn.)
(Sista meningen låter lite stel. Hur skulle du skriva om den från passiv form och utan att använda ordet signifikant?)
-
- Inlägg: 95
- Blev medlem: 18 nov 2007, 22:47
- OS: Ubuntu
- Utgåva: 18.04 Bionic Beaver LTS
- Ort: Huddinge / Stockholm / Sverige
- Kontakt:
Re: mv och regexp?
Yes. Precis det som var "problemet". :-) Tackar. Fungerar som smort.David Andersson skrev:Kan det möjligtvis vara så att du i .profile eller .bashrc har definierat en alias eller shell-funktion för ls som lägger till flaggan --color? I så fall ändra till --color=auto eller ta bort aliasen helt.Jojan skrev:Det fungerar inte riktigt. När jag ska flytta ner får jag felet/varningenKod: Markera allt
mv: kan inte ta status på "\033[01;32mMögel - Försök inte fly.ogg\033[00m": Filen eller katalogen finns inte
(Man ska vara försiktig med att definiera om standardprogram. Om beteendet ändrats på ett signifikant sätt bör man definiera den med ett nytt namn.)
(Sista meningen låter lite stel. Hur skulle du skriva om den från passiv form och utan att använda ordet signifikant?)