![在 Ubuntu 中查找、移动和删除](https://linux22.com/image/875711/%E5%9C%A8%20Ubuntu%20%E4%B8%AD%E6%9F%A5%E6%89%BE%E3%80%81%E7%A7%BB%E5%8A%A8%E5%92%8C%E5%88%A0%E9%99%A4.png)
操作系统: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