The UNIX and Linux Forums  
Hej och välkommen från USA till UNIX och Linux Forum! Tack för ditt besök och gå med i vår globala gemenskapen.

Go Back   UNIX och Linux Forum > Upp Forum > UNIX for Dummies Frågor & Svar
.
google unix.com



UNIX for Dummies Frågor & Svar Om du inte är säker på var att skriva en UNIX eller Linux fråga efter det här. Alla UNIX-och Linux-nybörjare välkomna!

Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
Tråd Thread Starter Forum Svar Senaste Inlägg
gör katt rekursivt på alla filer i en katalog tulip Shell-programmering och Skript 11 05-21-2009 06:24
rekursivt döpa om filer catgovind UNIX for Dummies Frågor & Svar 2 08-20-2008 03:50
byta namn på filen i parti reldb UNIX för avancerade & Expertanvändare 7 01-14-2008 06:43
byta namn på partiet kathy18 Shell-programmering och Skript 3 03-09-2005 09:47
Lista filer rekursivt roberthawke UNIX for Dummies Frågor & Svar 9 06-24-2002 07:19

Reply
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Sök i denna tråd Rate Thread Visningslägen
  #1 (permalänk)  
Old 06-26-2009
.. Chris .. ..Chris.. is offline
Registered User
  
 

Join Date: juni 2009
Inlägg: 4
Exclamation Sats döpa rekursivt

Jag skulle vilja ersätta flera understryker med bindestreck men jag har 26.000 filer att byta namn. De är alla i en filstruktur och flera underleverantörer kataloger.

Det skulle vara mycket enklare om jag hade ett skript för att göra det. Här är några prover på filnamnen:

Exempel 1
books/horrors/small/books_horrors_small_0000000386.jpg

Byt namn till

books/horrors/small/books-horrors-small-0000000386.jpg

Exempel 2
books/comedy/small/books_comedy_small_0000001687.jpg

Byt namn till

books/comedy/small/books-comedy-small-0000001687.jpg

Det finns 26.000 filer som ser similer till det och är alla i olika kataloger.

Det enda jag behöver göra är att ersätta alla understreck _ med bindestreck --
  #2 (permalänk)  
Old 06-26-2009
rakeshawasthi rakeshawasthi is offline
Registered User
  
 

Join Date: Aug 2004
Plats: Indien
Inlägg: 379
Har du något? Minst bör du.
nedanstående kod kommer att fungera, men du försöker skriva för loop för detta, minst.
Kod:
 sed 's/_/-/g'
  #3 (permalänk)  
Old 06-26-2009
ghostdog74 ghostdog74 is offline Forum Advisor  
Registered User
  
 

Join Date: Sep 2006
Inlägg: 2.538
Kod:
awk 'BEGIN{
    q="\047"
    path="/path/to/search"
    cmd="find "path" -type f -name \"*_*.jpg\""
    while(( cmd|getline f )>0){
        m=split(f,file,"/")
        gsub(/_/,"-",file[m])
        newfilename = join(file,1,m,"/")            
        mv = "mv "q f q" "q newfilename q
        print mv
        #system(mv) #uncomment to use                     
        close(mv)
    }
    close(cmd)
}
function join(array, start, end, sep,    result, i)
{
         if (sep == "") sep = " "
         else if (sep == SUBSEP) sep = ""
         result = array[start]
         for (i = start + 1; i <= end; i++)
             result = result sep array[i]
         return result
}'

Senast redigerad av ghostdog74; 06-26-2009 at 03:17..
  #4 (permalänk)  
Old 07-01-2009
.. Chris .. ..Chris.. is offline
Registered User
  
 

Join Date: juni 2009
Inlägg: 4
Batchfilen Rename rekursivt - Brilliant, nu Hur man på Directory Namn?

ghostdog74 lösning nedan BRILLANT och fungerat väl.

Uppföljning fråga:

Hur man gör exakt samma sak, men endast på mappar i samma fil mappträd (rekursivt)?

DougABC123


Citat:
Ursprungligen postat av ghostdog74 View Post
Kod:
awk 'BEGIN{
    q="\047"
    path="/path/to/search"
    cmd="find "path" -type f -name \"*_*.jpg\""
    while(( cmd|getline f )>0){
        m=split(f,file,"/")
        gsub(/_/,"-",file[m])
        newfilename = join(file,1,m,"/")            
        mv = "mv "q f q" "q newfilename q
        print mv
        #system(mv) #uncomment to use                     
        close(mv)
    }
    close(cmd)
}
function join(array, start, end, sep,    result, i)
{
         if (sep == "") sep = " "
         else if (sep == SUBSEP) sep = ""
         result = array[start]
         for (i = start + 1; i <= end; i++)
             result = result sep array[i]
         return result
}'
Reply

Komihåglista

Taggar
parti döpa ersätta _ --

Thread Tools Sök i denna tråd
Sök i denna tråd:

Avancerad sökning
Visningslägen Betygsätt denna tråd
Betygsätt denna tråd:

Utstationering Regler
Du får inte efter nya trådar
Du får inte efter svar
Du får inte skicka bilagor
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG] kod
HTML-koden är Av
Trackback är
Pingbacks är
Refbacks är




Alla tider är GMT -4. Klockan är nu 10:25.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Översättningar Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX och Linux Forum Innehållet upphovsrättsskyddat © 1993-2009. All Rights Reserved.Ad förvaltning RedTyger

Content Relevant webbadresser från vBSEO 3.2.0