Je télécharge habituellement avec FileZilla dans le répertoire J'ai fait un script exécuté par FileZilla lorsque vous téléchargez la file d'attente de télécharger sur < Code> / public / téléchargements / complété code>. Mon annuaire J'ai essayé cette commande: p> Ceci fonctionne pour les fichiers et dossiers téléchargés nommés sans caractères spéciaux: ils sont déplacés à J'ai recherché une solution par moi-même mais je n'ai pas trouvé quelque chose pour mes besoins alliant trouver, grep et xargs pour les fichiers et répertoires. p> Comment dois-je modifier ma commande? p> p> / Public / Téléchargements Code> sur mon NAS.
/ public / téléchargements code> contient également deux fichiers et trois répertoires qui ne doivent pas être déplacés. p>
/ public / téléchargements / complété code>
Mais quand il y a un
à code> ou quelque chose d'autre spécial, Xarg se plaint citation unique inégalée; Par défaut, les citations sont spéciales à Xargs, sauf si vous utilisez l'option -0 em> p>
3 Réponses :
J'ai donc changé ma stratégie pour une boucle à l'aide d'un fichier texte temporaire: 1) J'écris une liste de répertoires et de fichiers à déplacer avec "LS" dans "TEMP .txt " p> 2) Chaque ligne de" TEMP.TXT "est transmise à la variable $ actuelle. Donc, chaque fichier et répertoire sont déplacés un par un avec "MV". La variable $ Courant est double cité dans la commande MV en cas de caractère "espace" au nom du répertoire ou du fichier p> 3) "Temp.txt" est supprimé P> P> P >
Ceci est juste une suggestion pour votre stratégie de changement forte> em> et pas sur xargs code>. Vous n'avez besoin que de la coque code> shell et
mv code> pour l'outil externe.
#!/usr/bin/env bash
shopt -s nullglob extglob
array=(
folder.jpg
log.txt
Temp
Cache
Completed
)
to_skip=$(IFS='|'; printf '%s' "*@(${array[*]})")
for item in /Public/Downloads/*; do
[[ $item == $to_skip ]] && continue
echo mv -v "$item" /Public/Downloads/Completed/ || exit
done
echo code> si vous pensez que la sortie est correcte. LI>
-x code> E.g.
SET -X code> (après l'option shebang) pour voir quel / ce que le code effectue ou
bash -x my_script code>, supposant
my_script code> est le nom de votre script. li>
ul> p>
basé sur l'entrée OP, le problème principal est le nom des fichiers avec des caractères "spéciaux", y compris l'espace. Deux options: