Поиск, перемещение и удаление в 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