Localizando, movendo e removendo no Ubuntu

3

SO: Ubuntu 14.04.2 LTS (GNU / Linux 3.13.0-62-genérico x86_64)

Eu tenho um diretório como o seguinte:

~/total/
    test1/
        test1.txt
        some_other_file_i_dont_care.py
    test2/
        test2.tex
        some_folder_i_dont_care/
    test3/
        test3.csv

Quero mover somente os arquivos de texto de lá e apagar as pastas pai (que têm os mesmos nomes dos arquivos em que estou interessado).

Portanto, o resultado deve ser este:

~/total/
    test1.txt
    test2.tex
    test3.csv

Acho que não estou longe da solução com essa função:

find ~/total/ -type f  \( -iname '*.txt' -o -iname '*.tex' -o -iname '*.csv' \)          
| xargs mv -ifile file ~/total/

Mas como posso remover as pastas restantes?

    
por tomasyany 04.09.2015 / 01:49

1 resposta

3

Você pode fazer as duas operações de uma só vez em find :

find . -depth \( -regex '.*\.\(txt\|tex\|csv\)' -exec mv -- {} . \; \
                 -o -not -name . -delete \)
  • -regex '.*\.\(txt\|tex\|csv\)' -exec mv -- {} . \; encontrará os arquivos com .txt ou .tex ou csv extensões e os moverá para o diretório atual

  • -not -name . -delete removerá tudo o mais

Exemplo:

total$ tree
.
├── test1
│   ├── some.py
│   └── test1.txt
├── test2
│   ├── somedir
│   └── test2.tex
└── test3
    └── test3.csv


total$ find . -depth \( -regex '.*\.\(txt\|tex\|csv\)' -exec mv -- {} . \; -o -not -name . -delete \)


total$ tree
.
├── test1.txt
├── test2.tex
└── test3.csv
    
por heemayl 04.09.2015 / 03:01