linux utilisation générique en cp et mv
Je suis de la rédaction d'un script de traitement de 20 fichiers. Tous situés dans des répertoires différents. J'ai nom de fichier partiel.
- Dans le répertoire des journaux, File1_Date_time.err changement de Fichier1__Date_temps_orig.err
- cd ../scripts/
- sh File.sh
Fichier1 répertoire /data/data1directory/Sample_File1/logs/File1_Data_time.err
Fichier2 répertoire /data/data2directory/Sample_File2/logs/File2_Data_time.err
.....
Mon script ressemble à ceci. (runrunrun.sh)
#!/bin/bash
INPUT=$1
mv /data/*/Sample_*/logs/*_Data_time.err /data/*/Sample_*/logs/*_Data_time_orig.err
cp /data/*/Sample_*/scripts/*.sh /data/*/Sample_*/scripts/*_orig.sh
sh /data/*/Sample_*/scripts/*_orig.sh
Lors de l'exécution, j'ai essayé.
./runrunrun.sh Fichier1
. runrunrun.sh Fichier1
sh runrunrun.sh Fichier1
mv: ne peut pas se déplacer /data/data1directory/Sample_File1/logs/File1_Data_time.err /data/*/Sample_*/logs/*_Data_time_orig.err
: Aucun fichier ou répertoire
le cp a également obtenu de la même information
Je fais il correct?
Merci!
mv
, cp
, etc. ne sont pas transmis les jokers que vous êtes en train de rédiger, si ces caractères génériques ont pour être valable, toute expansion. Au lieu de cela, ils sont passés littérale des noms de fichiers créés par l'exécution de ces expansions. Ainsi, depuis qu'ils ne connaissent pas la traduction littérale des caractères génériques utilisés dans le nom de l'entrée, elle ne peut pas mapper un *
dans le nom de l'entrée à un *
dans le nom de la sortie.Si vous voulez écrire le renommage des outils, un bon endroit pour commencer est BashFAQ #30: mywiki.wooledge.org/BashFAQ/030
Connexes: stackoverflow.com/questions/20629302/...
BTW,
sh foo.sh
est très dangereux, sauf si vous êtes absolument certain que ce script commence par #!/bin/sh
plutôt que #!/bin/bash
, #!/bin/ksh
, #!/bin/zsh
, etc; autrement, il peut utiliser le mauvais interprète.
OriginalL'auteur TJ Wu | 2016-02-29
Vous devez vous connecter pour publier un commentaire.
Parlons de la façon dont les caractères génériques de travail pour une minute.
ne pas invoquer
cp
avec un argument*.txt
, si tous les fichiers correspondant à ce glob existent. Au lieu de cela, il fonctionne quelque chose comme ceci:De même, quelque chose comme
...ne peut pas savoir quoi faire, parce que quand il est invoqué, ce qu'il voit est:
ou, pire, si vous avez déjà ont un fichier nommé
z.old
, il va voir:Donc, vous avez besoin d'utiliser des outils différents. Considérer:
Il utilise un paramètre d'extension de dépouiller la fin de la queue de l'ancien nom avant d'ajouter le nouveau nom.
Il fonctionne parfaitement. Merci!
OriginalL'auteur Charles Duffy
La
find
de commande peut être utilisé de façon concise dans des cas simples où vous souhaitez effectuer des opérations sur les génériques (ou plus complexe) de nom de fichier correspond. La technique ci-dessous peuvent être commis à la mémoire ... ou presque !Cela fonctionne en laissant le
find
commande exécuter une autre commande sur chaque fichier qu'il trouve. Vous pouvez sèche-exécuter cet exemple à l'aide deecho
au lieu demv
.Si nous voulions déplacer tous les fichiers dans le répertoire courant avec nom commençant par "rapport", à un autre parallèle répertoire appelé "rapports":
La chaîne de caractères génériques doivent être entre guillemets, les {} le marquage du nom du fichier qui a été "trouvé" doit être entre guillemets et le point-virgule final doit être échappés - tout en raison de Bash/shell traitement de ces personnages.
Regardez la page de man pour
find
pour plus d'utilisations: https://linux.die.net/man/1/findOriginalL'auteur MikeW
Essayez ceci:
Modifier ces:
dans ces:
ligne de commande:
mv "$f"
, plutôt -- si le??
correspond à un nom de fichier avec des espaces blancs, ouIFS
contient un caractère dans le nom (c'est à dire._
), le comportement, autrement, pourraient être surprenant.BTW, je suis un peu dans le flou sur la façon dont cela est applicable à la question à portée de main --
c_cd_delim_??.csv
ne pas me regarder comme un des patrons de l'OP a été utilisé comme un exemple de ce qu'ils voulaient match. Auriez-vous l'esprit d'édition pour faire applicabilité à la question plus clair?OriginalL'auteur Jon Lancelle