2015-10-27 4 views
2

У меня есть несколько каталогов, как показано ниже. Я хочу перечислить каталоги, в которых нет файлов SQL. Например, «dev.mysite.com» в приведенном ниже примере. Im использованием убунту 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/... 

Ive пытался добиться этого с помощью «найти» с «вырезать» и «xargs» и перемещение этих каталогов в каталог «dirwithsql» и принять оставшиеся, как каталог без SQL-файла вручную.

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

Ive пытался с

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 

Shall работать даже с экзотическими названиями каталогов (пробелы, переводы строк ...)

Смежные вопросы