2009-11-20 11 views
0

J'ai quelques fichiers vidéo se terminant par .wmv .mov .mpg. J'ai des fichiers de musique se terminant par .mp3 .wma. Et enfin j'ai des fichiers texte qui se terminent tous dans l'extension .txtscript shell de base

J'ai écrit un script shell qui génère des sous-dossiers, un pour les fichiers musicaux, un pour les fichiers vidéo et un pour les fichiers texte, puis organise tous des fichiers dans les sous-dossiers corrects. Mais j'ai rencontré un petit problème ...

*** Je voudrais que le script soit interactif et invite l'utilisateur s'il veut organiser les fichiers. De plus, j'aimerais que le script écrive un fichier journal contenant, pour chaque fichier, le nom du fichier d'origine, ainsi que le nouveau chemin/nom du fichier dans lequel il a été déplacé. Et je voudrais que le script accepte un argument de ligne de commande, qui est le dossier qui contient les fichiers non organisés. Cela devrait permettre au script d'être localisé et exécuté à partir de n'importe où dans le système de fichiers, et accepter n'importe quel dossier de fichiers non organisés.

Exemple:

organizefiles.sh mystuff/media

où les sous-dossiers serait aller à l'intérieur "médias"

Toutes les idées sur la façon de le faire? Merci!

+2

Vous ne pouvez pas simplement poster une liste de fonctionnalités et ensuite dire "Des idées sur comment faire ça?" Choisissez une chose spécifique et demandez comment faire cela. Sinon, il semble que vous demandiez simplement à SO d'écrire votre script pour vous. –

+1

Vous devez spécifier l'interaction de l'utilisateur plus en détail. Et vous devriez montrer le code que vous avez jusqu'ici. –

+0

Vous êtes ci-dessous, vous trouverez ce que j'ai jusqu'à maintenant –

Répondre

4

Voici une implémentation partielle pour commencer. Essayez et faites le reste vous-même.

find /path -type f \(-iname "*.mp3" -o -iname "*.txt" \) -exec file -N "{}" + | while IFS=":" read -r filename type 
do 
    case "$type" in 
     *[vV]ideo*|*AVI*) echo "Video: $filename";; 
     *[Aa]udio*|*MPEG*ADTS*) echo "Audio file: $filename";; 
     *[Aa]scii*[tT]ext*) echo "Text: $filename" ;; 
     *) echo "No type: $filename-> type: $type";; 
    esac 
done 

S'il vous plaît lire bash tutorial ou this pour obtenir familiariser avec les scripts shell.

+0

Vous êtes trop gentil, monsieur. C'est comme un mini tutoriel lui-même! – codebliss

2

Je recommanderais de passer en python, beaucoup plus facile d'écrire et de maintenir un tel code.

Comme pour bash:

  1. entrée de lecture: read
  2. Lire les arguments de ligne de commande: see here
  3. Ecrire à un fichier journal, il suffit de ne echo "something" >> mylogfile.log
+0

Merci pour les liens, ils étaient très utiles! –

0

Voici le script que je avoir jusqu'à présent

 
#!/bin/bash 
mkdir movies 
mkdir songs 
mkdir textfiles 
mv *.wmv movies 
mv *.mov movies 
mv *.mpg movies 
mv *.mp3 songs 
mv *.wma songs 
mv *.txt text 
ls -l movies, >> log.txt 
ls -l songs >> log.txt 
ls -l textfiles >> log.txt 
+1

Vous devez publier des suivis en tant que commentaires ou en modifiant la question d'origine. –

+0

Je suis désolé, merci! –