2017-09-10 2 views
0

/root/mp3/path contient le fichier ci-dessous. je veux déplacer le fichier contient la lettre "dans" vers un autre dossierscript shell si condition trop d'arguments

2017-02-10-12-11-05-in.talaw 
    2017-02-10-12-11-05-out.talaw 
    2017-02-10-12-12-05-in.alaw 
    2017-02-10-12-12-05-out.alaw 


    $FILES=/root/mp3/* 
    for f in "$FILES" 
    do 
    ef=$(ls $f | awk -F"." '{print $1}' | awk -F "-" '{print $NF}') 
    #to check in for a file 
    if [ $ef = "in" ] 
    #if file contian "in" letter then move to other folder) 
    then 
    mv /FILES /sotrage 
    fi 
    done 

obtenir erreur trop d'arguments à if [$ ef = "dans"] si je l'ai essayé avec si [ "ef $" == « dans »] Je ne reçois pas sortie courant

i am using if [ $ef = "in" ] to compare if file contains "in" 

alors seulement il devrait déplacer des fichiers conatians pour un autre dossier

+0

Existe-t-il un moyen de convertir ces fichiers .talaw en mp3/wav? Je souhaite alimenter ces appels vers un convertisseur parole-texte. –

Répondre

0

vraiment ce que vous voulez faire est mv -t /destination /root/mp3/*-in.*


Vous rencontrez des problèmes en raison de la vous stockez le modèle dans une variable:

$FILES=/root/mp3/* 
for f in "$FILES"; do 

À ce stade, $f contient la chaîne littérale "/root/mp3/*" - le modèle n'a pas encore été étendu en raison des citations autour de "$FILES"

T poule, vous le faites

ef=$(ls $f | awk -F"." '{print $1}' | awk -F "-" '{print $NF}') 

$f est non protégée, de sorte que la coquille se dilate le modèle et ls voit enfin la liste de tous les fichiers. Vous passez awk plusieurs lignes de texte. $ef contiendra les nouvelles lignes. Essayez echo "$ef" à ce stade.

+0

merci après avoir supprimé $ avant les fichiers je reçois la sortie correcte. Avant de déplacer le fichier, je vais mélanger avec un autre fichier, donc je l'utilise si –

0

ne suis pas sûr de votre exigence de concurrence que votre question ne concerne que si la condition essayez de changer condition à [ $ef == "in" ] OU [[ $ef == "in" ]] Parce que single = signifie qu'il fonctionnera comme un opérateur d'affectation et non comme une condition. S'il vous plaît essayer et laissez-moi savoir si cela vous aide.

+0

mon exigence est seulement les fichiers nom qui contient "in" lettre devrait passer à autre dossier essayé ce [$ ef == "in"] mais il ne peut pas valider dans la lettre –