J’essaie de planifier mon script shell mais quand il a déclenché pour traiter une tâche planifiée, il y a cette invite d’erreur. mais quand aucun fichier ne doit être traité, il affiche simplement la commande echo.
voici mon code:
if [ "$(ls -A $path)" ] then for file_name in "$path"/*; do filebasename=$(basename "$file_name") prefix=${filebasename:0:4}; if [ "$prefix" == "abcd" ] ; then mv "$file_name" "$out" fi done else echo "No files available at $path" fi
et c’est l’erreur:
SH:prefix=${filebasename:0:4}:0403-011 The specified substitution is not valid for this command
Vous pouvez écrire votre code plus simplement de cette manière:
#!/bin/bash count=0 if [[ -d "$path" ]]; then for file_name in "$path"/abcd*; do [[ -f "$file_name" ]] && { ((count++)); mv "$file_name" "$out"; } done fi if ((count == 0)); then echo "No files available at $path" fi
Les avantages:
ls
abcd
Si vous n’êtes pas intéressé à savoir s’il y a des fichiers correspondants ou non, le tout peut être écrit sur une seule ligne:
find "$path" -name "abcd*" -type f -exec mv "{}" "$out" \;
J’utilise ce code: prefix = $ (echo $ {filebasename} | cut -c1-4)
au lieu de préfixe = $ {filebasename: 0: 4};
maintenant il fonctionne complètement dans mon travail cron et aucune erreur comme dit précédemment. Merci pour l’aide les gars ! 🙂