files=$("find . -type f -exec grep -v "^HF" {};") for file in ($files) do mv $file <rep_cible> done
En gros... j'ai pas de moyen de vérifier là ;)
Bonjour !
Sous AIX v5.1 avec ksh
Je voudrais pourvoir copier tous les fichiers d'un répertoire sauf ceux qui commence par les deux lettre HF ???
Quelqu'un peut'il me renseigner ??
Merci
Stephane Chazelas
2006-11-10, 05:11(-08), Dam:
avec un script shell non?
du style :
files=$("find . -type f -exec grep -v "^HF" {};") for file in ($files) do mv $file <rep_cible> done
En gros... j'ai pas de moyen de vérifier là ;) [...] [Merci de poster a l'endroit]
Ouch! En tres gros alors :). Je ne crois pas que la commande "find . -type f -exec grep -v "^HF" {};" existe. Ce n'est pas la syntaxe correcte pour for. grep match sur son entree standard ou sur le contenu des fichiers passés en arguments, pas sur la valeur de ses arguments. Les variables, quand referencee en contexte de liste doivent etre quotees. find va operer recursivement.
La syntaxe !(pattern) avait deja ete donnee a l'OP:
mv -- !(HF*) <rep-cible> (syntaxe ksh, ou zsh -o kshglob or bash avec option extglob)
files=$("find . -type f -exec grep -v "^HF" {};")
for file in ($files)
do
mv $file <rep_cible>
done
En gros... j'ai pas de moyen de vérifier là ;)
[...] [Merci de poster a l'endroit]
Ouch! En tres gros alors :). Je ne crois pas que la commande
"find . -type f -exec grep -v "^HF" {};" existe. Ce n'est pas
la syntaxe correcte pour for. grep match sur son entree
standard ou sur le contenu des fichiers passés en arguments, pas
sur la valeur de ses arguments. Les variables, quand referencee
en contexte de liste doivent etre quotees. find va operer
recursivement.
La syntaxe !(pattern) avait deja ete donnee a l'OP:
mv -- !(HF*) <rep-cible>
(syntaxe ksh, ou zsh -o kshglob or bash avec option extglob)
files=$("find . -type f -exec grep -v "^HF" {};") for file in ($files) do mv $file <rep_cible> done
En gros... j'ai pas de moyen de vérifier là ;) [...] [Merci de poster a l'endroit]
Ouch! En tres gros alors :). Je ne crois pas que la commande "find . -type f -exec grep -v "^HF" {};" existe. Ce n'est pas la syntaxe correcte pour for. grep match sur son entree standard ou sur le contenu des fichiers passés en arguments, pas sur la valeur de ses arguments. Les variables, quand referencee en contexte de liste doivent etre quotees. find va operer recursivement.
La syntaxe !(pattern) avait deja ete donnee a l'OP:
mv -- !(HF*) <rep-cible> (syntaxe ksh, ou zsh -o kshglob or bash avec option extglob)
Oui effectivement en tres gros. Je n'ai pas de Linux à la maison qui m'aurait permis de vérifier...
sinon find . ! -name . -prune ! -type d ! -name 'HF*' -exec mv {} <rep-cible> ; n'est pas plus simple en find . -type f ! -name 'HF*' -exec mv {} <rep-cible> ; ?
Sinon sans find ça doit etre possible aussi: files=`ls . | grep -v '^HF'` for file in $files do mv $file <rep_cible> done (faut le voir en tant qu'algorithme car c'est surement exactement comme ça)
Question ++ : il est où le pb avec mon for?
2006-11-10, 05:11(-08), Dam:
avec un script shell non?
du style :
files=$("find . -type f -exec grep -v "^HF" {};") for file in ($files) do mv $file <rep_cible> done
En gros... j'ai pas de moyen de vérifier là ;) [...] [Merci de poster a l'endroit]
Ouch! En tres gros alors :). Je ne crois pas que la commande "find . -type f -exec grep -v "^HF" {};" existe. Ce n'est pas la syntaxe correcte pour for. grep match sur son entree standard ou sur le contenu des fichiers passés en arguments, pas sur la valeur de ses arguments. Les variables, quand referencee en contexte de liste doivent etre quotees. find va operer recursivement.
La syntaxe !(pattern) avait deja ete donnee a l'OP:
mv -- !(HF*) <rep-cible> (syntaxe ksh, ou zsh -o kshglob or bash avec option extglob)
Oui effectivement en tres gros. Je n'ai pas de Linux à la maison qui
m'aurait permis de vérifier...
sinon
find . ! -name . -prune ! -type d ! -name 'HF*' -exec mv {}
<rep-cible> ;
n'est pas plus simple en
find . -type f ! -name 'HF*' -exec mv {} <rep-cible> ;
?
Sinon sans find ça doit etre possible aussi:
files=`ls . | grep -v '^HF'`
for file in $files
do
mv $file <rep_cible>
done
(faut le voir en tant qu'algorithme car c'est surement exactement comme
ça)
Question ++ : il est où le pb avec mon for?
2006-11-10, 05:11(-08), Dam:
avec un script shell non?
du style :
files=$("find . -type f -exec grep -v "^HF" {};")
for file in ($files)
do
mv $file <rep_cible>
done
En gros... j'ai pas de moyen de vérifier là ;)
[...] [Merci de poster a l'endroit]
Ouch! En tres gros alors :). Je ne crois pas que la commande
"find . -type f -exec grep -v "^HF" {};" existe. Ce n'est pas
la syntaxe correcte pour for. grep match sur son entree
standard ou sur le contenu des fichiers passés en arguments, pas
sur la valeur de ses arguments. Les variables, quand referencee
en contexte de liste doivent etre quotees. find va operer
recursivement.
La syntaxe !(pattern) avait deja ete donnee a l'OP:
mv -- !(HF*) <rep-cible>
(syntaxe ksh, ou zsh -o kshglob or bash avec option extglob)
Oui effectivement en tres gros. Je n'ai pas de Linux à la maison qui m'aurait permis de vérifier...
sinon find . ! -name . -prune ! -type d ! -name 'HF*' -exec mv {} <rep-cible> ; n'est pas plus simple en find . -type f ! -name 'HF*' -exec mv {} <rep-cible> ; ?
Sinon sans find ça doit etre possible aussi: files=`ls . | grep -v '^HF'` for file in $files do mv $file <rep_cible> done (faut le voir en tant qu'algorithme car c'est surement exactement comme ça)
Question ++ : il est où le pb avec mon for?
2006-11-10, 05:11(-08), Dam:
avec un script shell non?
du style :
files=$("find . -type f -exec grep -v "^HF" {};") for file in ($files) do mv $file <rep_cible> done
En gros... j'ai pas de moyen de vérifier là ;) [...] [Merci de poster a l'endroit]
Ouch! En tres gros alors :). Je ne crois pas que la commande "find . -type f -exec grep -v "^HF" {};" existe. Ce n'est pas la syntaxe correcte pour for. grep match sur son entree standard ou sur le contenu des fichiers passés en arguments, pas sur la valeur de ses arguments. Les variables, quand referencee en contexte de liste doivent etre quotees. find va operer recursivement.
La syntaxe !(pattern) avait deja ete donnee a l'OP:
mv -- !(HF*) <rep-cible> (syntaxe ksh, ou zsh -o kshglob or bash avec option extglob)
Oui effectivement en tres gros. Je n'ai pas de Linux à la maison qui m'aurait permis de vérifier...
sinon find . ! -name . -prune ! -type d ! -name 'HF*' -exec mv {} <rep-cible> ; n'est pas plus simple en find . -type f ! -name 'HF*' -exec mv {} <rep-cible> ; ?
-type f, c'est uniquement pour les fichiers reguliers, ce n'est pas synonyme de ! -type d.
Sans ! -name . -prune, find va descendre dans les sous-repertoires.
Sinon sans find ça doit etre possible aussi: files=`ls . | grep -v '^HF'` for file in $files
Si tu veux utiliser la fonction de decoupage du shell, alors il faut specifier le separateur.
IFS=' ' # saut de ligne, autrement ca decoupe aussi sur les espaces et # tabs, mais note que rien n'empeche un nom de fichier de # contenir un saut de ligne, donc cette methode n'est # qu'approximative.
et il faut desactiver le globbin
set -f # sans quoi les wildcards sont expandés.
do mv $file <rep_cible>
Ici, aucune raison de demander du decoupage ou du globbing, donc $file devrait etre quoté: "$file"
mv -- "$file" <rep_cible>
done (faut le voir en tant qu'algorithme car c'est surement exactement comme ça)
Question ++ : il est où le pb avec mon for?
[...]
for file in ($files)
IFS=<separator>; set -f for file in $files
# pas de parentheses.
Tu confonds peut-etre avec la syntaxe abregee de zsh:
for file ($=files) cmd -- $file
-- Stéphane
2006-11-10, 11:30(-08), Dam:
Oui effectivement en tres gros. Je n'ai pas de Linux à la maison qui
m'aurait permis de vérifier...
sinon
find . ! -name . -prune ! -type d ! -name 'HF*' -exec mv {}
<rep-cible> ;
n'est pas plus simple en
find . -type f ! -name 'HF*' -exec mv {} <rep-cible> ;
?
-type f, c'est uniquement pour les fichiers reguliers, ce n'est
pas synonyme de ! -type d.
Sans ! -name . -prune, find va descendre dans les
sous-repertoires.
Sinon sans find ça doit etre possible aussi:
files=`ls . | grep -v '^HF'`
for file in $files
Si tu veux utiliser la fonction de decoupage du shell, alors il
faut specifier le separateur.
IFS='
' # saut de ligne, autrement ca decoupe aussi sur les espaces et
# tabs, mais note que rien n'empeche un nom de fichier de
# contenir un saut de ligne, donc cette methode n'est
# qu'approximative.
et il faut desactiver le globbin
set -f # sans quoi les wildcards sont expandés.
do
mv $file <rep_cible>
Ici, aucune raison de demander du decoupage ou du globbing, donc
$file devrait etre quoté: "$file"
mv -- "$file" <rep_cible>
done
(faut le voir en tant qu'algorithme car c'est surement exactement comme
ça)
Question ++ : il est où le pb avec mon for?
[...]
for file in ($files)
IFS=<separator>; set -f
for file in $files
# pas de parentheses.
Tu confonds peut-etre avec la syntaxe abregee de zsh:
Oui effectivement en tres gros. Je n'ai pas de Linux à la maison qui m'aurait permis de vérifier...
sinon find . ! -name . -prune ! -type d ! -name 'HF*' -exec mv {} <rep-cible> ; n'est pas plus simple en find . -type f ! -name 'HF*' -exec mv {} <rep-cible> ; ?
-type f, c'est uniquement pour les fichiers reguliers, ce n'est pas synonyme de ! -type d.
Sans ! -name . -prune, find va descendre dans les sous-repertoires.
Sinon sans find ça doit etre possible aussi: files=`ls . | grep -v '^HF'` for file in $files
Si tu veux utiliser la fonction de decoupage du shell, alors il faut specifier le separateur.
IFS=' ' # saut de ligne, autrement ca decoupe aussi sur les espaces et # tabs, mais note que rien n'empeche un nom de fichier de # contenir un saut de ligne, donc cette methode n'est # qu'approximative.
et il faut desactiver le globbin
set -f # sans quoi les wildcards sont expandés.
do mv $file <rep_cible>
Ici, aucune raison de demander du decoupage ou du globbing, donc $file devrait etre quoté: "$file"
mv -- "$file" <rep_cible>
done (faut le voir en tant qu'algorithme car c'est surement exactement comme ça)
Question ++ : il est où le pb avec mon for?
[...]
for file in ($files)
IFS=<separator>; set -f for file in $files
# pas de parentheses.
Tu confonds peut-etre avec la syntaxe abregee de zsh:
for file ($=files) cmd -- $file
-- Stéphane
Dam
OK nickel.
Merci ;)
2006-11-10, 11:30(-08), Dam:
Oui effectivement en tres gros. Je n'ai pas de Linux à la maison qui m'aurait permis de vérifier...
sinon find . ! -name . -prune ! -type d ! -name 'HF*' -exec mv {} <rep-cible> ; n'est pas plus simple en find . -type f ! -name 'HF*' -exec mv {} <rep-cible> ; ?
-type f, c'est uniquement pour les fichiers reguliers, ce n'est pas synonyme de ! -type d.
Sans ! -name . -prune, find va descendre dans les sous-repertoires.
Sinon sans find ça doit etre possible aussi: files=`ls . | grep -v '^HF'` for file in $files
Si tu veux utiliser la fonction de decoupage du shell, alors il faut specifier le separateur.
IFS=' ' # saut de ligne, autrement ca decoupe aussi sur les espaces et # tabs, mais note que rien n'empeche un nom de fichier de # contenir un saut de ligne, donc cette methode n'est # qu'approximative.
et il faut desactiver le globbin
set -f # sans quoi les wildcards sont expandés.
do mv $file <rep_cible>
Ici, aucune raison de demander du decoupage ou du globbing, donc $file devrait etre quoté: "$file"
mv -- "$file" <rep_cible>
done (faut le voir en tant qu'algorithme car c'est surement exactement comme ça)
Question ++ : il est où le pb avec mon for?
[...]
for file in ($files)
IFS=<separator>; set -f for file in $files
# pas de parentheses.
Tu confonds peut-etre avec la syntaxe abregee de zsh:
for file ($=files) cmd -- $file
-- Stéphane
OK nickel.
Merci ;)
2006-11-10, 11:30(-08), Dam:
Oui effectivement en tres gros. Je n'ai pas de Linux à la maison qui
m'aurait permis de vérifier...
sinon
find . ! -name . -prune ! -type d ! -name 'HF*' -exec mv {}
<rep-cible> ;
n'est pas plus simple en
find . -type f ! -name 'HF*' -exec mv {} <rep-cible> ;
?
-type f, c'est uniquement pour les fichiers reguliers, ce n'est
pas synonyme de ! -type d.
Sans ! -name . -prune, find va descendre dans les
sous-repertoires.
Sinon sans find ça doit etre possible aussi:
files=`ls . | grep -v '^HF'`
for file in $files
Si tu veux utiliser la fonction de decoupage du shell, alors il
faut specifier le separateur.
IFS='
' # saut de ligne, autrement ca decoupe aussi sur les espaces et
# tabs, mais note que rien n'empeche un nom de fichier de
# contenir un saut de ligne, donc cette methode n'est
# qu'approximative.
et il faut desactiver le globbin
set -f # sans quoi les wildcards sont expandés.
do
mv $file <rep_cible>
Ici, aucune raison de demander du decoupage ou du globbing, donc
$file devrait etre quoté: "$file"
mv -- "$file" <rep_cible>
done
(faut le voir en tant qu'algorithme car c'est surement exactement comme
ça)
Question ++ : il est où le pb avec mon for?
[...]
for file in ($files)
IFS=<separator>; set -f
for file in $files
# pas de parentheses.
Tu confonds peut-etre avec la syntaxe abregee de zsh:
Oui effectivement en tres gros. Je n'ai pas de Linux à la maison qui m'aurait permis de vérifier...
sinon find . ! -name . -prune ! -type d ! -name 'HF*' -exec mv {} <rep-cible> ; n'est pas plus simple en find . -type f ! -name 'HF*' -exec mv {} <rep-cible> ; ?
-type f, c'est uniquement pour les fichiers reguliers, ce n'est pas synonyme de ! -type d.
Sans ! -name . -prune, find va descendre dans les sous-repertoires.
Sinon sans find ça doit etre possible aussi: files=`ls . | grep -v '^HF'` for file in $files
Si tu veux utiliser la fonction de decoupage du shell, alors il faut specifier le separateur.
IFS=' ' # saut de ligne, autrement ca decoupe aussi sur les espaces et # tabs, mais note que rien n'empeche un nom de fichier de # contenir un saut de ligne, donc cette methode n'est # qu'approximative.
et il faut desactiver le globbin
set -f # sans quoi les wildcards sont expandés.
do mv $file <rep_cible>
Ici, aucune raison de demander du decoupage ou du globbing, donc $file devrait etre quoté: "$file"
mv -- "$file" <rep_cible>
done (faut le voir en tant qu'algorithme car c'est surement exactement comme ça)
Question ++ : il est où le pb avec mon for?
[...]
for file in ($files)
IFS=<separator>; set -f for file in $files
# pas de parentheses.
Tu confonds peut-etre avec la syntaxe abregee de zsh: