Trädvy Permalänk
Medlem
Registrerad
Mar 2015

filflyttning i linux

Hej
har ett litet problem som jag inte lyckas lösa.

jag har ca 300 filer med namnexempel:
123456876653839.info
987647483983782.info
984874746733993.info
dessa info filer ligger i en mapp som heter infofiler

sen har jag mappar som heter samma som filen tex:
123456876653839
987647483983782
984874746733993
dessa mappar ligger i en mapp som heter Recording

info filerna skall kopieras från infofiler till respektive mapp som ligger under mappen Recording

finns det någon vänlig själ som kan hjälpa mig med ett litet script ????

mvh
wmbekar.

Trädvy Permalänk
Medlem
Plats
/bin/bash
Registrerad
Mar 2002

for i in *.info; do DIR=$(echo $i|sed -e 's/.info//'); mv $i Recording/$DIR/; done

Cisco - Linux - VMWare
-- Citera mig om ni vill få återkoppling --

Trädvy Permalänk
Medlem
Registrerad
Mar 2015
Skrivet av deegan:

for i in *.info; do DIR=$(echo $i|sed -e 's/.info//'); mv $i Recording/$DIR/; done

Det här skall jag testa.
underbart snabbt svar

Trädvy Permalänk
Forumledare
Registrerad
Okt 2002
Skrivet av deegan:

for i in *.info; do DIR=$(echo $i|sed -e 's/.info//'); mv $i Recording/$DIR/; done

Med variabelsubstitution kan man spara några forkar:

for i in *.info; do mv $i Recording/${i%.info}/; done

(koden förutsätter som innan att man står i katalogen `infofiler` och att `Recording` ligger i roten av denna katalog). Handlar det om 300 filer så spelar det ingen större roll, men går man uppåt så bör det gå mot att skilja en faktor 4 i hastighet (om man flyttar filer inom samma filsystem, vill säga, då I/O annars kommer dominera). Variabelsubstitution är generellt att föredra för stränghantering i skalet framför externa forkar som ofta blir rätt bökiga.

En annan lösning ifall prestanda skulle bli ett problem eller ifall man behöver göra mer avancerade substitutioner är att (över)använda `rename`-verktyget som ofta kommer med vanliga Perl-installationer och därmed brukar vara närvarande (heter ibland `prename` och ibland `file-rename`). Utöver att kunna ändra namn på filer så kan det faktiskt även flytta filer, då man kan byta ut katalogseparatorer.

rename 's#(.*).info$#Recording/$1/$&#' *.info

under samma förutsättningar som ovan, med enkla modifieringar ifall man inte står i "rätt katalog" eller liknande. Har inte gjort några tidstester, men det bör gå i ett huj. Man får dock se upp med `ARG_MAX` om man går upp mot miljontals filer .

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Trädvy Permalänk
Medlem
Registrerad
Mar 2015

härliga människor här inne

Nu en annan fråga.

Jag har ca 7000 filer med namnexempel:
kalle.nfo
oskar.nfo
dessa nfo filer ligger i en mappar som heter
kalle
oskar
som i sin tur ligger i en mapp som heter namn

om jag vill byta namn på alla dessa filer men att de skall ligga kvar i respektive mapp hur gör man då?
dvs
exempel
från
kalle.nfo
oskar.nfo
till
kalle.tifo
oskar.tifo

Och om jag vill byta namn på filerna samtidigt som jag flyttar dem till nya mappar på en annan plats som heter nya_namn

någon som kan hjälpa mig med detta.

Trädvy Permalänk
Medlem
Registrerad
Jul 2005
Skrivet av wmbekar:

Nu en annan fråga.

Jag har ca 7000 filer med namnexempel:
kalle.nfo
oskar.nfo
dessa nfo filer ligger i en mappar som heter
kalle
oskar
som i sin tur ligger i en mapp som heter namn

om jag vill byta namn på alla dessa filer men att de skall ligga kvar i respektive mapp hur gör man då?
dvs
exempel
från
kalle.nfo
oskar.nfo
till
kalle.tifo
oskar.tifo

Och om jag vill byta namn på filerna samtidigt som jag flyttar dem till nya mappar på en annan plats som heter nya_namn

någon som kan hjälpa mig med detta.

Byte av namn:

du har ett gäng kataloger med filer i
/namn/katalog1/kalle.nfo
/namn/katalog1/pelle.nfo

/namn/katalog2/olle.nfo
/namn/katalog2/mormor.nfo
......
/namn/katalog99

stå i rotkatalogen, dvs namn katalogen:
find . -name "*.nfo" -exec rename 's/\.nfo$/.tifo/' '{}' \;

Trädvy Permalänk
Medlem
Registrerad
Mar 2015

underbart

@Lexdale:

tack så mycket.
räddat min dag...