J'ai besoin de copier le dossier avec plusieurs fichiers dans un autre dossier dans le pipeline de construction.
j'utilise
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file target_file cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file ... target_directory
et j'obtiens une erreur avec le code de sortie 126:
cp -R -v pathToSourceFolder pathToDestFolder cp -R -v /Users/runner/runners/2.166.4/work/1/s/en.lproj/ /Users/runner/runners/2.166.4/work/1/s/platforms/ios/AppName/Resources
Quelqu'un peut-il m'aider car je suis nouveau dans linux / macOS utilise / cmd? Remarque: le pipeline s'exécute sous macOS.
3 Réponses :
J'ai besoin de copier le dossier avec plusieurs fichiers dans un autre dossier dans le pipeline de construction.
/Users/runner/runners/2.166.4/work/1/s
suppose que/Users/runner/runners/2.166.4/work/1/s
est le dossier de travail par défaut de votre build. Veuillez donc éviter de coder en dur le chemin, à la place, vous pouvez utiliser$(System.DefaultWorkingDirectory)
qui représente ce chemin. Voir Variables prédéfinies Azure Devops.Étant donné que votre objectif initial est de copier les fichiers dans le pipeline Azure Devops, vous n'avez pas besoin de vous soucier trop de la syntaxe de copie correspondante dans différents systèmes d'exploitation (Linux, MacOS ou Windows).
Vous pouvez faire ce que vous voulez facilement en utilisant la tâche officielle Copier les fichiers . Cette tâche nécessite trois entrées: le
Source folder
Target folder
et leContents
nous voulons copier, c'est tout.Format de l'interface utilisateur classique:
Vous pouvez choisir le dossier source via l'option
Browse Source Folder
. Et puis utilisez**
comme contenu,$(System.DefaultWorkingDirectory)/platforms/ios/Fixi/Resources
comme dossier cible.Format Yaml:
- task: CopyFiles@2 displayName: 'My Copy Task' inputs: SourceFolder: en.lproj TargetFolder: '$(System.DefaultWorkingDirectory)/platforms/ios/Fixi/Resources'Nous avons fait la logique derrière pour vous afin que vous puissiez utiliser cette tâche facilement sous MacOS / Linux / Windows. Journal de mon test:
Merci pour vos suggestions. cela a aidé à écrire correctement les chemins.
@RageshPikalmunde Vous êtes les bienvenus! Et trouvez-vous la solution à votre problème après les commentaires ci-dessus? Si tel est le cas, pensez à l'ajouter comme réponse et à l' accepter . Il serait donc utile pour les autres membres qui rencontrent le même problème de trouver facilement la solution. Bonne journée:)
comme mentionné dans votre réponse ... il ne copie que les fichiers du dossier source vers le dossier cible ... non ?? Avons-nous la tâche de copier le dossier avec son fichier d'un emplacement à un autre comme je l'ai posé en question ou cette tâche fonctionne comme excepté? ci-dessus la réponse acceptée fonctionne ... Je veux juste savoir pour la connaissance personnelle.
@RageshPikalmunde Hmm, je pense que la tâche peut aussi le faire. Changez l'entrée du dossier cible en $(System.DefaultWorkingDirectory)/platforms/ios/Fixi/Resources/en.lproj
, puis la tâche copiera le contenu du dossier en.lproj (source) vers la cible en.lproj (sinon existe, la tâche le créera pour vous). Remarque: les fichiers sont copiés de manière récursive lors de l'utilisation de cette tâche. Ainsi, la tâche de copie de fichiers fonctionnera comme une «tâche de copie de dossier». J'espère que cela aide ~
Comme il n'y a manifestement rien de mal dans la commande cp, j'écrirais simplement quelques contrôles de sécurité sur la présence des répertoires:
# Define directories involved from="pathToSourceFolder" to="pathToDestFolder" # Check existence if [[ -d "$from" ]] then # If the destination directory does not exist, we create it. [[ -d $to ]] || mkdir -p "$to" if [[ -d $to ]] then cp -R -v "$from" "$to" else # If we get here, we will likely have permission problems. echo Can not create directory $to ls -ld "$to" fi else echo Source directory $from does not exist fi
Je sais que la réponse acceptée dit que la commande "cp" n'est pas interrompue, mais elle se trouve en fait dans les pipelines Azure. Microsoft semble ajouter un "/" à la fin par défaut, ce qui rompt le comportement de la commande.
si tu fais:
cp ./src/myfile.txt ./dest/myfile.txt/
il copiera les fichiers du dossier src vers le dossier dest.
si vous écrivez:
cp ./src/myfile.txt ./dest/myfile.txt
il copiera le dossier src dans celui de destination, vous laissant avec / dest / src / *
De plus, mon pipeline de construction a échoué lorsque j'ai essayé de copier un fichier
cp -r ./src ./dest/
L'ajout du "/" à la fin le fera échouer car il tente de vider le fichier dans un répertoire qui n'existe pas puisque la commande réelle qui s'exécute est la suivante.
cp -r ./src ./dest
Veuillez ne pas fournir de captures d'écran, sauf si cela est nécessaire pour la compréhension, mais postez la commande avec laquelle vous avez un problème sous forme de texte.
J'ai pensé que je ferais mieux d'afficher le problème ... devrais-je modifier la question?
Absolument. Si vous avez vraiment des photos chose aide, vous pouvez poster un lien vers une image en plus. À tout le moins, nous devons voir la commande, qui provoque l'erreur, sous forme de texte (afin qu'elle puisse être copiée et collée).
@ user1934428 est-il clair maintenant? pouvez-vous s'il vous plaît répondre à la question?
Je ne pense pas que votre répertoire s'appelle vraiment
pathToSourceFolder
. Vous devez publier la commande exactement telle qu'elle est écrite dans votre script shell.pathToSourceFolder
est juste un moyen de dire quel est le répertoire source monsieurOui, si vous ne dites pas les répertoires réels exactement comme vous les avez écrits, mais que nous ne voyons pas s'il contient des caractères spéciaux qui, s'ils ne sont pas correctement cités, pourraient provoquer l'erreur.
Continuons cette discussion en chat .
@ user1934428 Bonjour ami, veuillez envisager d'ajouter votre solution comme réponse car votre script fonctionne bien pour résoudre le problème d'origine. (Selon les dernières nouvelles de la salle de discussion ci-dessus ~) afin que les membres ayant un problème similaire puissent trouver facilement les informations utiles et nous peut archiver ce fil! Bonne journée :)