script bash do linux para criar pastas e mover arquivos [duplicados]

3

Olá eu preciso criar pasta com base em um nome de arquivo e nesta pasta criar outro e, em seguida, mova o arquivo para esta segunda pasta

exemplo:

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

todos os meus arquivos .jpg estão em

  

/ root / Desktop / My_pictures

então deve ficar assim:

imagem de exemplo "cat.jpg"

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

Desculpe se não sou preciso, mas inglês não é minha língua nativa.

Atenciosamente e obrigado

    
por user262404 26.03.2014 / 22:37

2 respostas

6

Você também pode remover o ls *.jpg e simplesmente usar conchagem :

#!/bin/bash

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

Por favor, crie e execute este script dentro de /root/Desktop/My_pictures .

    
por Tinti 26.03.2014 / 23:14
3

Uma abordagem semelhante:

#!/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

Salve o script acima como, por exemplo, ~/movefiles.sh , torne-o executável com chmod +x movefiles.sh e execute-o:

~/movefiles.sh
    
por terdon 27.03.2014 / 00:11