Aller au contenu

Script déplacer fichier vers autre dossier


cFlavien

Messages recommandés

Bonjour a tous.

J'ai un DS215j, je voudrais faire un script pour déplacer des fichier qui s’exécuterait tous les jours.

Je voudrais pouvoir déplacer les fichier en fonction de leur nom.

exemple: Si extension est ".jpg ou .png" et nom du fichier contient "toto" alors déplacer vers "volume1/photos/toto/"

Et à la fin supprimer les dossiers vides en ignorant  thumb.db, *.lnk et *.url

 

Pouvez me dire si c'est possible et comment faire ?

Merci

 

Lien vers le commentaire
Partager sur d’autres sites

@cFlavien l'inconvénient est que tu ne donne pas assez de détails sur ce que tu veux faire (et surtout j'espère que la demande n'est pas ici pour réaliser un devoir à rendre à l'école)

En essayant d'interpréter, ca devrait ressembler à ceci (tu as de la chance que j'avais un peu  de temps à perdre):

#!/bin/bash
PATH=/bin:/usr/bin
cd /tmp                         # par sécurité
cleanup=""
while getopts :c OPT; do
    case $OPT in
        c|+c)
            cleanup=yes
            ;;
        *)
            echo >&2 "usage: ${0##*/} [+-c} [--] ARGS..."
            exit 2
    esac
done
shift $(( OPTIND - 1 ))
OPTIND=1
src_dir="$1"
shift
target_dir="$1"
shift

findargs=("-type" "f" "(")
for ext in $*
do
    findargs+=( "-name" "*.$ext" "-o" )
done

findargs+=('-false' ')')

if cd "$src_dir" ; then
    find . "${findargs[@]}"  -print0 | xargs -0 --no-run-if-empty mv -v -t "$target_dir"
else
    echo >&2 "répertoire \"$src_dir\" non trouvé"
    exit 1
fi

case $cleanup in
    y*)
        echo "Nettoyage de $src_dir" >&2
        find "$src_dir" -iname "thumb.db" -o -name  "*.lnk" -o -name "*.url" -delete
        find "$src_dir" -depth -type d  -empty -delete
        ;;
esac
  • DSM6 minimum requis (pour le bash notamment).
  • j'ai mis le nettoyage optionnel (avec le switch "-c")
  • même si les fichiers sont dans des sous dossiers au départ, ils vont tous se retrouver "à plat" dans le répertoire d'arrivée.
  • la demande "supprimer les dossiers vides en ignorant  thumb.db, *.lnk et *.url" est moins triviale à réaliser, j'ai fait plus bourrin (suppression de tous les fichiers de ce type)
  • pas testé de façon exhaustive, script à exécuter à tes risques et périls 

invoquer le script comme ceci:

moveto [-c] <rep_source> <rep_cible> <extension> [<extension>...]

exemple: 

moveto -c /volume1/IN /volume1/photos/toto jpg png

Faudrait normalement delancer une indexation des dossiers cibles et surce (cf commande "synoindex", je te le laisse à titre d'exercice)

Modifié par CoolRaoul
Lien vers le commentaire
Partager sur d’autres sites

Bonjour, 

Merci j'ai tester le script, ça marche bien comme je vendrais.

Je pense que en le modifiant je pourrait avoir ce que je veut.

Et effectivement je n'ai peut être pas été très clair.

Plutôt qu'un long discours voici un exemple de script que j'ai essayer entre temps sur windows (qui je comprend un peut mieux que dans le langage linux / syno !)

(Mon script ne marche pas bien car il ne gère pas la ligne avec une étoile "\Photos\*\*p7700*.jpg" pour rechercher dans tous les sous dossiers)



:: DEPLACEMENT DES FICHIERS

set download=\\FLAVIEN_DS\volume1\homes\Flavien\Download

set public=\\FLAVIEN_DS\volume1\public
set photo=\\FLAVIEN_DS\volume1\photo
set podcast=\\FLAVIEN_DS\volume1\music\Podcast
set video=\\FLAVIEN_DS\volume1\video


::############# PHOTO #############
move "%download%\*.jpg" "%photo%\A_TRIER"
move "%download%\*.png" "%photo%\A_TRIER"

copy "%public%\Photos\*p7700*.jpg" "%photo%\FlickrSync\"
copy "%public%\Photos\*\*p7700*.jpg" "%photo%\FlickrSync\"
move "%public%\Photos\*2014*.jpg" "%photo%\2014\"
move "%public%\Photos\*2015*.jpg" "%photo%\2015\"
move "%public%\Photos\*2016*.jpg" "%photo%\2016\"
::###################################

::############# PODCAST #############

set pod=ADC
set pod_dossier=Apero du Captain
move "%download%\*%pod%*.mp3" "%podcast%\%pod_dossier%\"

set pod=wapx
set pod_dossier=Wapx
move "%download%\*%pod%*.mp3" "%podcast%\%pod_dossier%\"

set pod=LeGrosBoeuf
set pod_dossier=Le Gros Boeuf
move "%download%\*%pod%*.mp3" "%podcast%\%pod_dossier%\"

::###################################


::############# VIDEO #############
move "%download%\*.mkv" "%video%"
move "%download%\*.mp4" "%video%\"
move "%download%\*\*.mkv" "%video%\"
move "%download%\*\*.mp4" "%video%\"
::###################################


pause

L'idée est aussi de pouvoir facilement ajouter des ligne au besoin.

 

ps: non non ce n'est pas pour l'école, j'ai juste histoire d'automatiser des taches.

 

Modifié par cFlavien
Lien vers le commentaire
Partager sur d’autres sites

@CoolRaoul, j'ai réussi à utiliser ton script avec les lignes ci-dessous, ça fait exactement ce que je voulais :biggrin:

Juste quelques petit point, que je n'ai pas résolu, ou j'aurai besoin d'aide.

  •  Ligne 18, au lieu de déplacer les fichier les fichiers LeGrosBoeuf AVEC l’extension mp3, il déplace tous les fichier LeGrosBoeuf et TOUT les mp3.
  • Ligne 16, pour avoir des lignes moins longues je voudrais réutiliser des variables comme ceci,  mais il n'arrive pas trouvé le dossier source. Sans doute des 'apostrophes' a placer mais j'ai essayer de plusieurs façons et je n'ai pas trouvés ou les mettre.
moveto -c  ${download} /${podcast}/Apero du Captain/ ADC

 

  • Lorsque j’exécute les lignes une à une dans putty ça marche très bien. J'ai enregistré le code ci-dessous dans un fichier .sh, mais quand je l’exécute avec putty ou avec le planificateur de tâche il ne marche pas (command not foud). Je l’exécute tout simplement avec cette ligne "/volume1/homes/Flavien/Script_Synology/moveto_script.sh"

 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 download='/volume1/homes/Flavien/Download'
 public='/volume1/public'
 photo='/volume1/photo'
 podcast='/volume1/music/Podcast'
 video='/volume1/video'

 ############# PHOTO #############

 moveto -c  ${download} '/volume1/photo/A_TRIER' jpg
 moveto -c  ${download} '/volume1/photo/A_TRIER' png

 ###################################

 ############# PODCAST #############

 moveto -c  ${download} '/volume1/music/Podcast/Apero du Captain/' ADC
 moveto -c  ${download} '/volume1/music/Podcast/wapx/' wapx
 moveto -c  ${download} '/volume1/music/Podcast/Le Gros Boeuf/' LeGrosBoeuf mp3

 ###################################


 ############# VIDEO #############

 moveto -c  ${download} ${video} mkv
 moveto -c  ${download} ${video} mp4

 ###################################
Lien vers le commentaire
Partager sur d’autres sites

il y a 51 minutes, cFlavien a dit :
  •  Ligne 18, au lieu de déplacer les fichier les fichiers LeGrosBoeuf AVEC l’extension mp3, il déplace tous les fichier LeGrosBoeuf et TOUT les mp3.

Tous les paramètres à partir du 3ème et suivants sont la listes des extensions de fichiers à déplacer à partir du dossier nommé par le paramètre #1 vers le dossier nommé par le paramètre #2.

Sur la ligne 18, tu as mis en paramètre #3 "LeGrosBoeuf" . Le script interprète ça comme le déplacement des fichiers nommés "<machin>.LeGrosBoeuf". Je ne pense pas que ce soit ce que tu cherches à faire.

Citation
  • Ligne 16, pour avoir des lignes moins longues je voudrais réutiliser des variables comme ceci,  mais il n'arrive pas trouvé le dossier source. Sans doute des 'apostrophes' a placer mais j'ai essayer de plusieurs façons et je n'ai pas trouvés ou les mettre.

moveto -c  ${download} /${podcast}/Apero du Captain/ ADC

Il faut utiliser des *doubles* quotes (") pour que les variables soient interpolées à l'intérieur tout en conservant les espaces, autrement dit:

moveto -c  ${download} "/${podcast}/Apero du Captain/" ADC

Citation
  • Lorsque j’exécute les lignes une à une dans putty ça marche très bien. J'ai enregistré le code ci-dessous dans un fichier .sh, mais quand je l’exécute avec putty ou avec le planificateur de tâche il ne marche pas (command not foud). Je l’exécute tout simplement avec cette ligne "/volume1/homes/Flavien/Script_Synology/moveto_script.sh"

La première ligne de ton script doit être une ligne "shebang" pour indiquer le shell à utiliser, avec ce format:

#! /bin/bash

Il doit être exécutable aussi ("chmod +x /volume1/homes/Flavien/Script_Synology/moveto_script.sh")

Essaie de vérifier ça déjà.

Lien vers le commentaire
Partager sur d’autres sites

il y a 47 minutes, CoolRaoul a dit :

Sur la ligne 18, tu as mis en paramètre #3 "LeGrosBoeuf" . Le script interprète ça comme le déplacement des fichiers nommés "<machin>.LeGrosBoeuf". Je ne pense pas que ce soit ce que tu cherches à faire.

Non pas tout à fait ça, je veux déplacer les fichier dont le non est "LeGrosBoeuf" avec l'extension .mp3 (LeGrosBoeuf_01.mp3, LeGrosBoeuf_02.mp3,..)

Il faut peut être modifier ton script "moveto" pour que le 1er argument corresponde à une chaîne de caractère du non de fichier? (Éventuellement, ne chercher que dans le non et pas dans l’extension)

il y a 47 minutes, CoolRaoul a dit :

Il faut utiliser des *doubles* quotes (") pour que les variables soient interpolées à l'intérieur tout en conservant les espaces, autrement dit:

moveto -c  ${download} "/${podcast}/Apero du Captain/" ADC

Ça nickel ça marche, merci

 

il y a 47 minutes, CoolRaoul a dit :

La première ligne de ton script doit être une ligne "shebang" pour indiquer le shell à utiliser, avec ce format:


#! /bin/bash

 

 

#! /bin/bash
download='/volume1/homes/Flavien/Download/TEST_IN'
photo='/volume1/homes/Flavien/Download/TEST_OUT/photo'
podcast='/volume1/homes/Flavien/Download/TEST_OUT/podcast'
video='/volume1/homes/Flavien/Download/TEST_OUT/video'
############# PHOTO #############
moveto -c  ${download} ${photo} jpg
moveto -c  ${download} ${photo} png
############# PODCAST #############
moveto -c  ${download} "${podcast}/Apero du Captain" ADC
moveto -c  ${download} "${podcast}/wapx" wapx
moveto -c  ${download} "${podcast}/Le Gros Boeuf" LeGrosBoeuf mp3
############# VIDEO #############
moveto -c  ${download} ${video} mkv
moveto -c  ${download} ${video} mp4

Je pense être, bon mais la commande  "chmod +x /volume1/homes/Flavien/Script_Synology/test.sh" puis "cd /volume1/homes/Flavien/Script_Synology/" puis "./test.sh".

J'ai le message suivant 

"-ash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory"

et avec "bash test.sh"

Nettoyage de /volume1/homes/Flavien/Download/TEST_IN
: No such file or directoryvolume1/homes/Flavien/Download/TEST_IN
" non trouv▒/volume1/homes/Flavien/Download/TEST_IN
: No such file or directoryvolume1/homes/Flavien/Download/TEST_IN
" non trouv▒/volume1/homes/Flavien/Download/TEST_IN
: No such file or directoryvolume1/homes/Flavien/Download/TEST_IN
" non trouv▒/volume1/homes/Flavien/Download/TEST_IN
: No such file or directoryvolume1/homes/Flavien/Download/TEST_IN
" non trouv▒/volume1/homes/Flavien/Download/TEST_IN
: No such file or directoryvolume1/homes/Flavien/Download/TEST_IN
" non trouv▒/volume1/homes/Flavien/Download/TEST_IN
: No such file or directoryvolume1/homes/Flavien/Download/TEST_IN
" non trouv▒/volume1/homes/Flavien/Download/TEST_IN
: No such file or directoryvolume1/homes/Flavien/Download/TEST_IN
" non trouv▒/volume1/homes/Flavien/Download/TEST_IN

 

Modifié par cFlavien
Lien vers le commentaire
Partager sur d’autres sites

il y a 2 minutes, cFlavien a dit :

Non pas tout à fait ça, je veux déplacer les fichier dont le non est "LeGrosBoeuf" avec l'extension .mp3 (LeGrosBoeuf_01.mp3, LeGrosBoeuf_02.mp3,..)

Il faut peut être modifier ton script "moveto" pour que le 1er argument corresponde à une chaîne de caractère du non de fichier? (Éventuellement, ne chercher que dans le non et pas dans l’extension)

En effet, j'ai proposé le script en fonction de ton exemple ci dessous qui ne parlait que d'extension;

Le 20/4/2016 at 21:19, cFlavien a dit :

exemple: Si extension est ".jpg ou .png" et nom du fichier contient "toto" alors déplacer vers "volume1/photos/toto/"

Par contre, si tu veux pouvoir filtrer sur *l'ensemble* du nom du fichier, suffira de modifier la line suivante;

  findargs+=( "-name" "*.$ext" "-o" )

et la remplacer par

  findargs+=( "-name" "$ext" "-o" )

(faudrait aussi peut-être donner un autre nom à la variable "ext"  maintenant qu'on l’interprète différemment mais c'est cosmétique)

Optionnellement, tu peux aussi utiliser "-iname" au lieu de "-name" comme cela ça ignorera les différence majuscules/minuscules

Ayant fait ça, suffira d'utiliser pour les paramètres  3 et suivants "*.mp3" au lieu de simplement "mp3" (mettre toujours les doubles quotes pour éviter les surprises), et, dans le cas ci dessus: "LeGrosBoeuf*.mp3"

Citation

Je pense être, bon mais la commande  "chmod +x /volume1/homes/Flavien/Script_Synology/test.sh" ne fait rien, ni message d'erreur ni déplacement.

Encore heureux que ça ne fasse pas de message d'erreur! Je ne vais pas suggérer des commandes qui font des erreurs quand même!

Par contre, une fois cela effectué, essayer de nouveau lancer le script dans le contexte ou ça plantait (à savoir: "quand je l’exécute avec putty ou avec le planificateur de tâche il ne marche pas (command not foud)"). 

Lien vers le commentaire
Partager sur d’autres sites

il y a 17 minutes, CoolRaoul a dit :

Encore heureux que ça ne fasse pas de message d'erreur! Je ne vais pas suggérer des commandes qui font des erreurs quand même!

Par contre, une fois cela effectué, essayer de nouveau lancer le script dans le contexte ou ça plantait (à savoir: "quand je l’exécute avec putty ou avec le planificateur de tâche il ne marche pas (command not foud)"). 

J'ai éditer mon post entre temps :smile:

"-ash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory"  pour  "./test.sh"

": No such file or directoryvolume1/homes/Flavien/Download/TEST_IN" pour "bash test.sh"
Lien vers le commentaire
Partager sur d’autres sites

à l’instant, cFlavien a dit :

J'ai éditer mon post entre temps :smile:

"-ash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory"  pour  "./test.sh"


": No such file or directoryvolume1/homes/Flavien/Download/TEST_IN" pour "bash test.sh"

Ok, typique d'un script édité avec un éditeur Windows mal configuré pour une utilisation Unix.

Utilise Notepad ++ avec les options suivantes:

BKILPHj.png

Et pour réparer ton fichier actuel, toujours avec Notepad++, dans le menu "édition":

vM0UHrt.png

suivi de "enregistrer"

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.