The UNIX and Linux Forums  

Go Back   UNIX och Linux Forum > Upp Forum > Shell-programmering och Skript
.
google unix.com



Shell-programmering och Skript Post frågor om ksh, CSH, SH, bash, PERL, PHP, sed, awk och andra skalskript och skal skriptspråk här.

Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
Tråd Thread Starter Forum Svar Senaste Inlägg
För loop använder finna med filnamnet utrymmen mronsman UNIX for Dummies Frågor & Svar 3 09-12-2008 09:23
Variabel problem för slinga med om uttalande ejdv Shell-programmering och Skript 6 06-17-2008 09:52
För loop uttalande - fånga fel lumdev Shell-programmering och Skript 4 09-20-2007 08:50
Om uttalande i en tid loop Bobo UNIX for Dummies Frågor & Svar 2 11-07-2006 12:38
Om uttalande för slinga av en sträng Sniper pixie UNIX for Dummies Frågor & Svar 7 03-02-2006 07:28

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 07-03-2009
cbo0485 cbo0485 is offline
Registered User
  
 

Join Date: mars 2008
Inlägg: 87
För loop hitta uttalande filnamn otillbörlig

Kod:
for i in `find . -name "*.BEFORE_DISASTER_RECOVERY"`;do dir_name=`dirname $i`;file_name=`basename $i`;cd $dir_name;mv $file_name (STUCK HERE) ;pwd;cd $BASE_DIR;done
Okej, så jag kunde komma till denna punkt. Som ni ser har jag en liten för loop som söker efter alla filer med strängen BEFORE_DISASTER_RECOVERY i filnamnet, då sätter två variabler dir_name och filnamn, cd: s till dir_name abonnentförteckning och då det är där jag fastnar. Jag behöver mv $ filnamn till $ filename minus ". BEFORE_DISASTER_RECOVERY.

Jag är säker på att det är något enkelt, men det är där jag är nu fast.
  #2 (permalänk)  
Old 07-03-2009
vidyadhar85's Avatar
vidyadhar85 vidyadhar85 is offline Forum Staff  
Moderator (The Tutor)
  
 

Join Date: juni 2008
Ort: INDIEN
Inlägg: 1,400
Vad menar du med $ filename "minus"?
är det mv test.txt test-.txt?
  #3 (permalänk)  
Old 07-03-2009
cfajohnson's Avatar
cfajohnson cfajohnson is offline Forum Advisor  
Shell programmerare, författare
  
 

Join Date: mars 2007
Ort: Toronto, Kanada
Inlägg: 2361
Citat:
Ursprungligen postat av cbo0485 View Post

(Kod omformaterad för läsbarhet)
Citat:
Kod:
for i in `find . -name "*.BEFORE_DISASTER_RECOVERY"`

Det kommer att misslyckas om någon filnamn innehålla mellanslag. Pipe produktionen av hitta i en loop:

Kod:
find . -name "*.BEFORE_DISASTER_RECOVERY" |
while read file
do
  : do whatever
done
(Och skriptet kommer att bli mer lättläst om du använder en meningsfull variabelnamn för loop.)
Citat:
Kod:
do
  dir_name=`dirname $i`
  file_name=`basename $i`

Det finns inget behov av antingen externa kommandot, dirname eller basename. I Unix kan göra det internt:

Kod:
dir_name=${file%/*}
file_name=${file##*/}
Citat:
Kod:
  cd $dir_name
  mv $file_name # (STUCK HERE)

Både cd och mv kommer att misslyckas om $ dir_name innehåller utrymmen. Citat variabel referenser:

Kod:
  cd "$dir_name"
  mv "$file_name"
Citat:
Kod:
  pwd
  cd $BASE_DIR
done
Okej, så jag kunde komma till denna punkt. Som ni ser har jag en liten för loop som söker efter alla filer med strängen BEFORE_DISASTER_RECOVERY i filnamnet, då sätter två variabler dir_name och filnamn, cd: s till dir_name abonnentförteckning och då det är där jag fastnar. Jag behöver mv $ filnamn till $ filename minus ". BEFORE_DISASTER_RECOVERY.

Jag är säker på att det är något enkelt, men det är där jag är nu fast.

Allt du behöver är:

Kod:
find . -name "*.BEFORE_DISASTER_RECOVERY" |
while read file
do
  mv "$file" "$file%.BEFORE_DISASTER_RECOVERY}"
done
  #4 (permalänk)  
Old 07-03-2009
cbo0485 cbo0485 is offline
Registered User
  
 

Join Date: mars 2008
Inlägg: 87
Citat:
Ursprungligen postat av cfajohnson View Post

(Kod omformaterad för läsbarhet)

Det kommer att misslyckas om någon filnamn innehålla mellanslag. Pipe produktionen av hitta i en loop:

Kod:
find . -name "*.BEFORE_DISASTER_RECOVERY" |
while read file
do
  : do whatever
done
(Och skriptet kommer att bli mer lättläst om du använder en meningsfull variabelnamn för loop.)

Det finns inget behov av antingen externa kommandot, dirname eller basename. I Unix kan göra det internt:

Kod:
dir_name=${file%/*}
file_name=${file##*/}

Både cd och mv kommer att misslyckas om $ dir_name innehåller utrymmen. Citat variabel referenser:

Kod:
  cd "$dir_name"
  mv "$file_name"

Allt du behöver är:

Kod:
find . -name "*.BEFORE_DISASTER_RECOVERY" |
while read file
do
  mv "$file" "$file%.BEFORE_DISASTER_RECOVERY}"
done
Jag definitivt visste att jag var ny till linux manus, men aldrig insåg jag var så illa, lol.

Hur som helst, jag tror att ni missförstod eller hade ett stavfel, jag vill inte lägga till att min fil, jag vill ta bort det.

Jag har filer som heter:

startServerABC.BEFORE_DISASTER_RECOVERY
eller
startServer.sh.BEFORE_DISASTER_RECOVERY

Jag måste bort. BEFORE_DISASTER_RECOVERY från filnamnet, som skall lämnas med

startServerABC eller startServer.sh
  #5 (permalänk)  
Old 07-03-2009
vidyadhar85's Avatar
vidyadhar85 vidyadhar85 is offline Forum Staff  
Moderator (The Tutor)
  
 

Join Date: juni 2008
Ort: INDIEN
Inlägg: 1,400
sedan använda basename bara
Kod:
basename "$filename" .BEFORE_DISASTER_RECOVERY
home> basename startServer.sh.BEFORE_DISASTER_RECOVERY .BEFORE_DISASTER_RECOVERY
startServer.sh
home>  basename startServerABC.BEFORE_DISASTER_RECOVERY .BEFORE_DISASTER_RECOVERY
startServerABC
Jag tror att du har min punkt ...
  #6 (permalänk)  
Old 07-06-2009
cbo0485 cbo0485 is offline
Registered User
  
 

Join Date: mars 2008
Inlägg: 87
Citat:
Ursprungligen postat av vidyadhar85 View Post
sedan använda basename bara
Kod:
basename "$filename" .BEFORE_DISASTER_RECOVERY
home> basename startServer.sh.BEFORE_DISASTER_RECOVERY .BEFORE_DISASTER_RECOVERY
startServer.sh
home>  basename startServerABC.BEFORE_DISASTER_RECOVERY .BEFORE_DISASTER_RECOVERY
startServerABC
Jag tror att du har min punkt ...
Detta fungerar perfekt i min loop.

Tack
Kod:
for i in `find . -name "*.BEFORE_DISASTER_RECOVERY"`;do dir_name=`dirname $i`;file_name=`basename $i`;cd $dir_name;cp $file_name `basename $file_name .BEFORE_DISASTER_RECOVERY`;pwd;cd $BASE_DIR;done
Reply

Komihåglista

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 07:18.


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