2017-09-17 5 views
0

J'ai un répertoire qui contient plusieurs fichiers avec différentes extensions (pdf, doc, txt ... etc). J'essaie de renommer tous les fichiers en fonction du nom du répertoire tout en gardant l'extension de fichier la même. Le code ci-dessous fonctionne bien si tous les fichiers sont en format PDF, sinon il va aussi changer l'extension du fichier txt en pdf.Linux - renommer le fichier tout en conservant l'extension

Comment puis-je renommer les fichiers tout en conservant l'extension du fichier

mv "$file" "${dir}/${dir}-${count}.pdf" 

Merci.

Répondre

0

vous pouvez le faire via bash.

pouvez-vous s'il vous plaît fournir plus de détails. comment vous décidez de cette valeur de variable $ dir et $ count.

si vous savez déjà par ce que vous voulez changer le nom du fichier comme ci-dessous

ANCIEN NOM | NOUVEAU NOM | Chemin

test.1 | newtest.1 | Chemin

arty.2 | xyz.2 | Chemin

Si vous souhaitez le remplacer par des noms spécifiques, vous pouvez préparer une liste comme ci-dessus, puis parcourir le fichier avec while ou for. ci-dessous est extrait simple bash pour le cas où vous avez des fichiers sous le répertoire multiple

while IFS="|" read OLD NEW PATH 
do 
    cd $Path 

    filename=`echo $NEW|awk -F '.' '{print $1}'` 

    filetype=`echo $NEW|awk -F '.' '{print $2}'` 

    mv $OLD $filename.$filetype 

done<FILE_PATH 

si vous voulez effectuer une opération sous répertoire unique puis extrait ci-dessous fonctionnera.

for i in $(ls /tmp/temp) 
do 
    filename=`echo $i|awk -F "." '{print $1}'` 
    fileType=`echo $i|awk -F "." '{print $2}'` 
    mv $i $filename.$fileType 
done 
0

Je suppose que vous faites cela dans une sorte de boucle? Si oui, vous pouvez saisir l'extension de fichier d'abord avec

ext="${file##*.}" # eg. ext="txt", ext="pdf"... 

Et remplacer pdf avec $ext dans votre commande mv. Testé avec sh, bash, dash, ksh.