À l'aide d'un nom de fichier avec des espaces avec de la scp et chmod en bash
Périodiquement, je tiens à mettre les fichiers dans le répertoire /tmp de mon serveur pour partager. Ce qui est ennuyeux, c'est que je dois définir les autorisations à chaque fois que je la scp fichiers. En suivant les conseils de une autre question j'ai écrit un script qui copie un fichier de plus de, définit les autorisations et imprime ensuite l'URL:
#!/bin/bash
scp "$1" SERVER:"/var/www/tmp/$1"
ssh SERVER chmod 644 "/var/www/tmp/$1"
echo "URL is: http://SERVER/tmp/$1"
Lorsque je remplace SERVEUR avec mon hôte, tout fonctionne comme prévu...jusqu'à ce que j'execute le script avec un argument, espaces compris. Même si j'imagine que la solution pourrait être d'utiliser $@ je n'ai pas encore compris comment faire pour obtenir une espacés le nom du fichier à travailler.
Vous devez vous connecter pour publier un commentaire.
Il s'avère que ce qui est nécessaire est d'échapper à la voie qui sera envoyé au serveur distant. Bash pense que les citations dans le SERVEUR:"/var/www/tmp/$1" sont liées à l'1 $et les supprime de la sortie finale. Si j'essaie de le lancer:
En écho, nous voyons qu'il essaie de l'exécuter:
Si, au contraire, les citations sont échappés des littéraux alors la commande scp ressemble plus à vous attendiez:
Avec l'ajout d'un peu de code pour tronquer le chemin d'accès du script final devient:
Le script ressemble à droite. Ma conjecture est que vous devez citer le nom de fichier lorsque vous passer dans votre script:
Ou d'échapper à des espaces:
la façon la plus facile sans se soucier des espaces dans les noms de fichier, (en plus de la cotation), est de renommer vos fichiers de se débarrasser des espaces avant le transfert. Ou lorsque vous créez les fichiers, ne pas utiliser d'espaces. Vous pouvez faire cela, votre "meilleure pratique" quand vous le nom de vos fichiers.