2015-10-27 45 views
2

我有几个目录,如下面的目录。我想列出没有SQL文件的目录。例如下面例子中的“dev.mysite.com”。即时通讯使用Ubuntu 14.04 LTS查找不包含“* .SQL”文件

orange.com/ 
    orange.com.sql 
    10.10.10.1/public_html/... 

apple.edu.us/ 
    apple.edu.sql 
    10.10.10.2/public_html/... 

dev.mysite.com/ 
    10.10.10.3/public_html/ 

example.com/ 
    mysql_dbdump20150911.sql 
    10.10.11.11/public_html/... 

伊夫试图做到这一点使用“发现”和“剪切”和“xargs的”动人的这些目录的“dirwithsql”目录和手动取剩余的为目录,而SQL文件。

find . -maxdepth 2 -iname "*.sql" | cut -d'/' -f 2 | xargs -n 1 -I {} mv {} /backup/dirwithsql/{} 

伊夫试图与

find -maxdepth 2 ! -iname "*.sql" -exec dirname {} \; 

但上面的命令将显示所有目录

有没有更好的方法? 谢谢

回答

1

我最近有一个类似的问题,这个工作对我来说

for f in $(find . -type d -maxdepth 2); do if [[ $(ls -1 $f | grep '.sql$'|wc -l) == 0 ]] ; then echo $f; fi; done 
+0

感谢的人:)它的工作原理,但我需要抓住这些表情 –

0
find . -type d -print0 | while read -d $'\0' n; do [ -f "$n"/*.sql ] || echo $n; done 

就必因此具有异国情调的目录名工作(空格,换行...)