The UNIX and Linux Forums  


Go Back   Les systèmes UNIX et Linux Forums > Top Forums > De programmation et de script Shell
.
google unix.com



De programmation et de script Shell Posez vos questions à propos de KSH, CSH, SH, BASH, PERL, PHP, SED, awk et d'autres scripts shell et les langages de script shell ici.

Plus d'UNIX et Linux Forum Sujets Vous trouverez peut-être utile
Fil Thread Starter Forum Réponses Last Post
Pour trouver avec boucle en utilisant les espaces de nom de fichier mronsman UNIX pour les nuls Questions et réponses 3 09-12-2008 09:23 AM
Variable problème de boucle avec if ejdv De programmation et de script Shell 6 06-17-2008 09:52 AM
Pour loop statement - captures d'erreur lumdev De programmation et de script Shell 4 09-20-2007 08:50 AM
si, dans une boucle while bobo UNIX pour les nuls Questions et réponses 2 11-07-2006 12:38 PM
si déclaration en boucle d'une chaîne de caractères Sniper Pixie UNIX pour les nuls Questions et réponses 7 03-02-2006 07:28 AM

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 Recherche sur ce Thread Rate Thread Modes d'affichage
  #1 (permalink)  
Old 07-03-2009
cbo0485 cbo0485 is offline
Registered User
  
 

Join Date: Mar 2008
Posts: 87
Pour trouver la boucle déclaration manipulation de nom de fichier


Code:
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

Bon, j'ai pu obtenir à ce point. Comme vous pouvez le voir, j'ai une petite boucle qui recherche tous les fichiers avec la chaîne BEFORE_DISASTER_RECOVERY dans le nom du fichier, puis il définit deux variables nom_répertoire et file_name, cd's à la nom_répertoire répertoire, puis c'est là où je suis coincé. J'ai besoin de mv $ file_name au moins $ filename ". BEFORE_DISASTER_RECOVERY.

Je suis sûr que c'est quelque chose de simple, mais c'est là où je suis actuellement coincé.
  #2 (permalink)  
Old 07-03-2009
vidyadhar85's Avatar
vidyadhar85 vidyadhar85 is offline Forum Staff  
Modérateur (Le Tuteur)
  
 

Date d'inscription: juin 2008
Lieu: INDE
Posts: 1,400
que voulez-vous dire par $ filename "moins"?
est-il mv test.txt test-.txt?
  #3 (permalink)  
Old 07-03-2009
cfajohnson's Avatar
cfajohnson cfajohnson is offline Forum Advisor  
Shell programmeur, auteur
  
 

Join Date: Mar 2007
Lieu: Toronto, Canada
Messages: 2361
Citation:
Posté par cbo0485 View Post

(Code reformaté pour la lisibilité)
Citation:

Code:
for i in `find . -name "*.BEFORE_DISASTER_RECOVERY"`

Cela ne réussira pas si tout les noms de fichiers contenant des espaces. Pipe de sortie de la trouver dans une boucle:


Code:
find . -name "*.BEFORE_DISASTER_RECOVERY" |
while read file
do
  : do whatever
done

(Et votre script sera plus lisible si vous utilisez un nom de variable pour la boucle.)
Citation:

Code:
do
  dir_name=`dirname $i`
  file_name=`basename $i`

Il n'est pas nécessaire pour l'externe, ou dirname basename. Le shell Unix peut le faire en interne:


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

Citation:
Code:
  cd $dir_name
  mv $file_name # (STUCK HERE)

Tant le cd et mv échouera si $ nom_répertoire contient des espaces. Quote variable notices:


Code:
  cd "$dir_name"
  mv "$file_name"

Citation:
Code:
  pwd
  cd $BASE_DIR
done

Bon, j'ai pu obtenir à ce point. Comme vous pouvez le voir, j'ai une petite boucle qui recherche tous les fichiers avec la chaîne BEFORE_DISASTER_RECOVERY dans le nom du fichier, puis il définit deux variables nom_répertoire et file_name, cd's à la nom_répertoire répertoire, puis c'est là où je suis coincé. J'ai besoin de mv $ file_name au moins $ filename ". BEFORE_DISASTER_RECOVERY.

Je suis sûr que c'est quelque chose de simple, mais c'est là où je suis actuellement coincé.

Tout ce dont vous avez besoin est:


Code:
find . -name "*.BEFORE_DISASTER_RECOVERY" |
while read file
do
  mv "$file" "$file%.BEFORE_DISASTER_RECOVERY}"
done

  #4 (permalink)  
Old 07-03-2009
cbo0485 cbo0485 is offline
Registered User
  
 

Join Date: Mar 2008
Posts: 87
Citation:
Posté par cfajohnson View Post

(Code reformaté pour la lisibilité)

Cela ne réussira pas si tout les noms de fichiers contenant des espaces. Pipe de sortie de la trouver dans une boucle:


Code:
find . -name "*.BEFORE_DISASTER_RECOVERY" |
while read file
do
  : do whatever
done

(Et votre script sera plus lisible si vous utilisez un nom de variable pour la boucle.)

Il n'est pas nécessaire pour l'externe, ou dirname basename. Le shell Unix peut le faire en interne:


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


Tant le cd et mv échouera si $ nom_répertoire contient des espaces. Quote variable notices:


Code:
  cd "$dir_name"
  mv "$file_name"


Tout ce dont vous avez besoin est:


Code:
find . -name "*.BEFORE_DISASTER_RECOVERY" |
while read file
do
  mv "$file" "$file%.BEFORE_DISASTER_RECOVERY}"
done

Je savais que je doute était nouveau pour linux de script, mais jamais réalisé que j'étais mauvais, lol.

De toute façon, je pense que vous avez mal ou a une faute de frappe, je ne veux pas ajouter que, pour mon dossier, je tiens à le supprimer.

J'ai des fichiers nommés:

startServerABC.BEFORE_DISASTER_RECOVERY
ou
startServer.sh.BEFORE_DISASTER_RECOVERY

J'ai besoin de supprimer les fichiers. BEFORE_DISASTER_RECOVERY du nom de fichier, pour être laissée à

startServerABC ou startServer.sh
  #5 (permalink)  
Old 07-03-2009
vidyadhar85's Avatar
vidyadhar85 vidyadhar85 is offline Forum Staff  
Modérateur (Le Tuteur)
  
 

Date d'inscription: juin 2008
Lieu: INDE
Posts: 1,400
puis utilisez la seule basename

Code:
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

Je pense que tu as mon point ...
  #6 (permalink)  
Old 07-06-2009
cbo0485 cbo0485 is offline
Registered User
  
 

Join Date: Mar 2008
Posts: 87
Citation:
Posté par vidyadhar85 View Post
puis utilisez la seule basename

Code:
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

Je pense que tu as mon point ...
Cela fonctionne parfaitement dans ma boucle.

Merci

Code:
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

Bookmarks

Thread Tools Recherche sur ce Thread
Recherche sur ce Thread:

Recherche avancée
Modes d'affichage Rate this thread
Rate this thread:

Règles de messages
Tu mai pas de nouvelles discussions: nonoui
Tu mai pas envoyer des réponses:
Tu mai pas envoyer des pièces jointes
Tu mai pas modifier vos messages

BB code est Sur
Smilies sont Sur
[IMG] code est Sur
Le code HTML est Hors tension
Trackbacks sont Sur
Pingbacks sont Sur
Refbacks sont Sur




Toutes les heures sont au format GMT -4. Le temps est maintenant 12:45 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traductions Langue Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Les systèmes UNIX et Linux Forums Content Copyright © 1993-2009. Tous droits Reserved.Ad de gestion par RedTyger

Content Relevant URLs par vBSEO 3.2.0