Linux move os arquivos do diretório específico para um diretório e apaga a pasta vazia

0

Eu preciso mover os arquivos para fora de um diretório dentro de um diretório dentro de um diretório e remover a pasta de onde os movo. Eu precisaria de um script recursivo. A estrutura do diretório:

/Folder0/Alphabetic_folder/Folder_name/DeleteFolder

/Folder0/A/Folder1/DeleteFolder
/Folder0/B/Folder2/DeleteFolder

DeleteFolder sempre tem o mesmo nome que é info . Eu precisaria de algo como:

  1. vai dentro do diretório (alfabético)
  2. para todas as pastas lá dentro, se houver uma info folder mv *.* na pasta atual, remova info (isso seria: mv info/* ./ && rm info )
  3. se info não estiver lá, saia da pasta
  4. mova para a próxima pasta

Tenho certeza de que esse é um problema trivial com algumas habilidades de script, mas minhas habilidades com scripts estão baixas neste problema.

    
por Michal Sapsa 20.03.2014 / 09:21

2 respostas

1

UPD. que funcionará melhor:)

find -depth -print0 |  while read -d '' -r dir; do if [[ $dir == *info ]]; then mv "$dir"/* /tmp; rmdir "$dir"; fi; done

resposta antiga aqui:

#!/bin/bash
cd /Folder0
for i in 'ls'; do #get list of files and dirs in a folder0
    if [ -d $i ]; then #if list item is a folder
    cd $i   #then go inside (in you ex its folder A)
    for j in 'ls'; do #list folders and files
            if [ -d $j ]; then #if item is folder
                    cd $j            #go inside (in your ex - Folder1)
                    mv info/* /any_folder_you_want #it will not move files if there is an error
                    rmdir info/ #it will not remove dir if it is not empty
                    cd .. #(go down)
            fi #(go to the next folder Folder2)
    done;  #end of folder A
    cd ..  #go down 
    fi     #next folder B...
done

Você precisa alterar a peça com mv e rmdir para testar se está obtendo resultados corretos basta colocar ls lá e comentar as linhas com mv e rmdir:

#mv info/* /any_folder_you_want #it will not move files if there is an error
ls
#rmdir info/ #it will not remove dir if it is not empty

você precisa executar esse script fora da pasta1.

perguntas?

    
por 20.03.2014 / 10:02
1

Supondo que a pesquisa seja para todos os diretórios alfa no diretório de trabalho:

dirs=$(find [a-z][A-Z]* -type d -name info) 
for f in $dirs; do echo "$f/*" done     # first test it works to requirements

for f in $dirs; do mv "$f/*" "$f"/..; rmdir "$f"; done # working version with mv and rmdir
    
por 20.03.2014 / 10:29