1 votes

Déplacement de tous les fichiers d'un répertoire en ignorant l'extension du fichier

J'ai un répertoire avec de multiples images dans différents types de fichiers (svg, png, jpeg, jpg et gif), j'ai également un fichier txt qui contient de nombreux noms d'images, mais sans l'extension du fichier, par exemple :

1664
2048
3m
5asec
6play
7_eleven
7_up
aba_pagum
abc
abouelafia
absolut
accor_hotels
acdc
ace
acer
actimel

Je veux faire une boucle à travers le fichier et trouver l'image dans le répertoire sans l'extension et la déplacer dans un nouveau dossier. Par exemple :

1664 -> move 1664.svg to the new folder
2048 -> move 2048.gif to the new folder

Et ainsi de suite..

Voici ce que j'ai réussi à faire : (move.sh)

# Create a directory
mkdir 01_img_exists

# Read text file with image names
cat image_names.txt | while read i; do
    # Move images to folder
   mv ./${i} ./01_img_exists
done

Comment puis-je déplacer les fichiers en ignorant l'extension ?

1voto

Raffa Points 11919

Vous êtes très proche.

mkdir -p 01_img_exists

while read i
  do
    echo mv ./"$i."* ./01_img_exists/
  done < image_names.txt

Essayez ce qui précède puis supprimez echo lorsque vous êtes satisfaits des résultats, de procéder au déménagement proprement dit.

  • mkdir -p va créer le répertoire s'il n'existe pas.
  • "$i."* correspondra à tous les noms dans le image_names.txt et tout ce qui suit le premier . c'est-à-dire toute extension.
  • < image_names.txt spécifie le fichier d'entrée à lire.

Vous pouvez omettre l'élément de tête ./ et cela fonctionnera bien.

Avis :

Il y a une limite sur le nombre de fichiers transmis à mv comme arguments dans une seule commande. Cette limite est appelée ARG_MAX . Il y a une petite chance que vous puissiez rencontrer cette limite. C'est cependant peu probable dans votre cas étant donné le nombre limité d'extensions pour un même nom de fichier. Si vous rencontrez cette limite par hasard, essayez plutôt le code ci-dessous.

mkdir -p 01_img_exists

while read i
  do
  for f in "$i."*
    do
      echo mv "$f" 01_img_exists/
    done
  done < image_names.txt

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X