Pode bash fazer pastas, com base em um nome de arquivo e, em seguida, mover arquivos para as pastas?

0

Em / Desktop / a /, há um conjunto de arquivos:

DSCN1840.AVI00001.png
DSCN1840.AVI00002.png
DSCN1840.AVI00003.png
DSCN1841.AVI00001.png

O que eu gostaria é ter a seguinte estrutura:

Desktop/a/DSCN1840/

  DSCN1840.AVI00001.png

  DSCN1840.AVI00002.png

  DSCN1840.AVI00003.png

Desktop/a/DSCN1841/

  DSCN1841.AVI00001.png
    
por user10630009 09.11.2018 / 18:14

1 resposta

0

Como um passo único, você pode percorrer todos os arquivos e reunir o nome do subdiretório desejado; se esse subdiretório ainda não existir, crie-o; em seguida, mova esse arquivo para esse subdiretório:

for f in *.png
do
  subdir=${f%%.*}
  [ ! -d "$subdir" ] && mkdir -- "$subdir"
  mv -- "$f" "$subdir"
done

A parte principal disso é a expansão de parâmetro em ${f%%.*} , que diz para remover a parte correspondente mais longa ( %% ) de um período seguido por qualquer coisa, que efetivamente exclua, por exemplo, as porções .AVI00003.png dos nomes de arquivos, deixando apenas o indicador do diretório principal.

    
por 09.11.2018 / 18:23