Copiando arquivos em uma pasta para pastas individuais

1

Isso pode soar como algo bastante estranho, mas, para meu HTPC, preciso reorganizar como meus arquivos são armazenados, de modo que cada um dos arquivos individuais em uma pasta precise ser movido para um subdiretório próprio (com o mesmo nome que o arquivo).

I.E. - Atualmente o diretório é:

directory/
- a.file
- b.file
- c.file

e quero alterá-lo para:

directory/
- a/
-- a.file
- b/
-- b.file
- c/
-- c.file

Eu não acho que isso é muito complicado, mas é estranho e eu não encontrei ninguém fazendo isso antes: eu acho que isso pode ser feito com encontrar e exec, mas eu sou um pouco batalhadora e não posso entendi bastante.

Muito obrigado antecipadamente (ou mesmo apenas por ter tempo para ler isto).

    
por paddymelon 01.07.2013 / 04:14

2 respostas

0

Escreva um script de shell que obtenha os arquivos como parâmetros:

#!/bin/bash

for filepath; do
  parentpath="${filepath%/*}"
  if [ "$parentpath" != "$filepath" ]; then # $file contains a /
    file="${filepath#"$parentpath"/}"
  else
    file="$filepath"
    parentpath=""
  fi
  filename="${file%.*}"
  if [ -z "$parentpath" ]; then
    mkdir -p "$filename" && mv "$file" "$filename"
  else
    mkdir -p "${parentpath}/$filename" &&
      mv "$filepath" "${parentpath}/$filename"
  fi
done

Você pode chamar esse script como ./script *.ext1 *.ext2 *.ext3 para números não muito grandes de arquivos ou como find ... -exec ./script {} + para grandes números.

    
por 01.07.2013 / 04:36
1

Outra solução:

#!/usr/bin/env bash

Dir="/tmp/directory/"

for f in "$Dir"/*;
do
    SubDir="${f%.*}"
    mkdir -- "$SubDir"
    mv -- "${f}" "$SubDir/"
done
    
por 01.07.2013 / 05:41