Поиск, перемещение и удаление в Ubuntu

ОС: Ubuntu 14.04.2 LTS (GNU/Linux 3.13.0-62-generic x86_64)

У меня есть каталог, подобный следующему:

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

Я хочу переместить туда только текстовые файлы и стереть их родительские папки (имена которых совпадают с именами файлов, которые меня интересуют).

Таким образом, результат должен быть таким:

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

Я думаю, что я не далеко от решения с этой функцией:

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

Но тогда как я могу удалить оставшиеся папки?

1 ответ

Решение

Вы можете сделать две операции за один раз find:

find . -depth \( -regex '.*\.\(txt\|tex\|csv\)' -exec mv -- {} . \; \
                 -o -not -name . -delete \)
  • -regex '.*\.\(txt\|tex\|csv\)' -exec mv -- {} . \; найдет файлы с .txt или же .tex или же csv расширения и переместит их в текущий каталог

  • -not -name . -delete затем удалит все остальное

Пример:

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
Другие вопросы по тегам