Mover arquivos de volta pelo diretório 2

6
$ cat file
/tmp/foldera/folderb/folderc/file1
/tmp/folderc/folderd/foldere/file2
/tmp/folderf/folderg/folderh/file3

Precisa mover esses arquivos para

/tmp/foldera/
/tmp/folderc/
/tmp/folderf/

, respectivamente, usando um loop ou qualquer outra maneira fácil de fazer isso.

    
por Chittha Shetty 23.10.2015 / 14:59

2 respostas

10

Use um loop while:

while IFS= read -r l; do
  mv -v -- "$l" "${l%/*/*/*}/"
done <file
  • while IFS= read -r l lerá o file linha por linha.
  • mv -v move os arquivos e -v informa mv para ser detalhado
    • "$l" é o nome do arquivo de origem
    • "${l%/*/*/*}/" é o diretório de destino. Ele remove 3 barras e o que está entre elas ( /*/*/* ) do backend do nome do arquivo.

Isso produzirá:

»/tmp/foldera/folderb/folderc/file1“ -> »/tmp/foldera/file1“
»/tmp/folderc/folderd/foldere/file2“ -> »/tmp/folderc/file2“
»/tmp/folderf/folderg/folderh/file3“ -> »/tmp/folderf/file3“
    
por 23.10.2015 / 15:07
6

Vou sugerir uma resposta semelhante ao caos, mas usando dirname

while IFS= read -r l; do
    mv -- "$l" "$(dirname -- "$(dirname -- "$l")")"
done <file

dirname informa o caminho do diretório em que um arquivo / diretório está localizado. Isso tem a vantagem de poder manipular também um diretório, caso seu arquivo tenha uma entrada como:

/tmp/foldera/folderb/folderc/folderd/
    
por 23.10.2015 / 17:56