2010-10-08 16 views
0

Nouveauté pour bash scripting, je suis en train d'écrire un script pour copier mes séries TV d'un dossier de téléchargement vers un dossier d'archive.Copie de fichiers Bash avec des variables

Jusqu'à présent, j'ai ceci:

find `*`show1`*`.avi | cp \"" $0 "\" "/mnt/main/data/tv/Show1" 
find `*`show2`*`.avi | cp \"" $0 "\" "/mnt/main/data/tv/Show2" 

Je comprends que ce n'est pas la meilleure méthode, mais mes compétences de bash sont assez limitées.

J'ai besoin de savoir comment je peux copier ce fichier trouvé, ou ne rien faire s'il ne trouve rien de correspondant (ce sera un script cron). par ex.

find `*`show1`*`.avi | cp "show1.hello.world.xvid.avi" "/mnt/main/data/tv/Show1" 
find `*`show2`*`.avi | cp "show2.foo.bar.xvid.avi" "/mnt/main/data/tv/Show2" 
find `*`show3`*`.avi | cp "null (nothing found)" "/mnt/main/data/tv/Show3" 

Merci!

EDIT: Résolu http://pastebin.com/aNLihR86

+0

Une sorte de double: http : //stackoverflow.com/questions/1313590/bash-copy-all-files-except-one – Wok

Répondre

2
find . -name "*show1*" -exec cp {} /mnt/main/data/tv/Show1 \; 

(Remplacez le par le répertoire que vous voulez regarder les fichiers.)

+0

Merci, cependant, il revient: find/my/dir -n ame * show1 * -exec cp {} "/ mnt/main/data/tv/Montre 1" \; find: show1.pdtv.avi: option inconnue – Dean

+0

Je pense que vous avez oublié de citer le nom param, il devrait être: find/mon/dir -name "* show1 *" -exec cp {} "/ mnt/main/données/tv/show 1 "\; – hellvinz

+0

Quand je le cite, il ne trouve rien (oui un fichier est là). find: No match – Dean

0

Bash 4+

shopt -s globstar 
shopt -s nullglob 
for file in **/*show* 
do 
    case "$file" in 
    *show1*) dest="/mnt/main/data/tv/Show1" ;; 
    *show2*) dest="/mnt/main/data/tv/Show2" ;; 
    *show3*) dest="/mnt/main/data/tv/Show2";; 
    esac 
    cp "$file" "$dest" 
done 
+0

Je reçois une erreur avec: http://pastebin.com/UDVCbrv0 – Dean