web-dev-qa-db-fra.com

linux bash script pour créer un dossier et déplacer des fichiers

Bonjour, j'ai besoin de créer un dossier basé sur un nom de fichier. Dans ce dossier, créez-en un autre, puis déplacez le fichier dans ce deuxième dossier.

exemple:

cat.jpg
create folder cat
create folder picture
move cat.jpg to picture 

tous mes fichiers .jpg sont en

/ root/Desktop/My_pictures

il devrait donc ressembler à ceci:

exemple d'image "cat.jpg"

/root/Desktop/My_pictures/cat/pictures/cat.jpg

Désolé si je ne suis pas précis, mais l'anglais n'est pas ma langue maternelle.

Cordialement et Merci

3
user262404

Vous pouvez également supprimer le ls *.jpg et simplement utiliser Shell globbing :

#!/bin/bash

for full_filename in *jpg; do
  extension="${full_filename##*.}"
  filename="${full_filename%.*}"
  mkdir -p "$filename/picture"
  mv "$full_filename" "$filename/picture"
done

Veuillez créer et exécuter ce script dans /root/Desktop/My_pictures.

6
Tinti

Une approche similaire:

#!/usr/bin/env bash

## iterate through each file whose name ends in 'jpg'
## saving it as $file. ~ is your $HOME directory
for file in ~/Desktop/My_pictures/*jpg
do
    ## basename will remove the path (~/Desktop/My_pictures) and also
    ## remove the extension you give as a second argument    
    name="$(basename "$file" .jpg)"

    ## create the directory, the -p means it will create 
    ## the parent directories if needed and it won't complain
    ## if the directory exists.
    mkdir -p ~/Desktop/My_pictures/"$name"

    ## copy the file to the new directory
    mv "$file" "~/Desktop/My_pictures/$name"
done

Enregistrez le script ci-dessus sous le nom, par exemple, ~/movefiles.sh, rendez-le exécutable avec chmod +x movefiles.sh et exécutez-le:

~/movefiles.sh
3
terdon