Par exemple:
7za e -y $file_name -o$dest_directory
Cela fonctionne bien, lorsqu'il est exécuté directement à partir de la ligne de commande, mais dans le script, l'erreur suivante apparaît:
n'a pas trouvé d'archive (aucune archive portant ce nom).
J'ai essayé d'utiliser:
7za e -y `ls -a | grep 001` -o`pwd`
Cela extrait les fichiers avec succès, mais les fichiers sont introuvables à la fin du script.
linux
shell-script
7-zip
Bhavya Maheshwari
la source
la source
pwd
;Réponses:
Je copie + colle votre script à partir du commentaire ci-dessus avec des sauts de ligne ajoutés aux
;
signes de lisibilité:Pour commencer, la première ligne devrait être le
#!/bin/bash
cas échéant, mais je suppose que c'est une faute de frappe.Votre
read
commande et la ligne suivante sont plus faciles à écrireread vmfile_path
. De cette façon, le shebang pourrait également être modifié#!/bin/sh
car vous n'utiliseriez aucune fonction spécifique à Bash.Vous devriez citer l'
cd
argument pour gérer les noms de répertoire avec des espaces.Je suppose que vous voulez extraire un fichier dont le nom contient la chaîne
001
dans la dernière ligne. À l'heure actuelle, il manque un processus de substitution et votre intention est probablement plus proche de:La
$()
syntaxe est plus facile à lire (et présente quelques autres avantages) par rapport aux backticks, mais elle fait la même chose.Je devinerais aussi que le répertoire de sortie utilise par défaut la
pwd
sortie, ce qui la rend superflue, mais je ne sais pas avec certitude.Votre commande ne l’aimera pas s’il existe plus d’un nom de fichier correspondant
001
.En ignorant le dernier problème, vous voudriez au total quelque chose comme:
Ou, plus simplement, remplacez les deux dernières lignes par (gérera également plusieurs correspondances) (même si cela n’a pas été testé):
Le modèle de correspondance de noms pourrait probablement être amélioré si vous connaissez davantage le nom de fichier.
la source