Как сравнить вывод ls двух папок, чтобы найти отсутствующий каталог?

Los archivos que está viendo no son cronsino wgetde salida. El uso más común de la salida wgetes obtener páginas web en el disco.

Mientras redirige stdiny stdout, no tuvo en cuenta el uso wgetde guardar páginas web.

Si solo desea acceder a esa URL, puede solicitar wgetque no guarde ninguna salida con la opción -qsilenciosa.

porman wget:

-q
--quiet Turn off Wget's output.

También preferiría no tener un trabajo cron en un servidor compartido ejecutándose cada minuto, y se ejecutaría como mínimo cada 5 minutos, como en:

*/5 * * * * wget -q http://yoururl > /dev/null 2>&1
3
08.07.2019, 18:19
4 ответа
diff -u <(ls dir1) <(ls dir2)

Это гарантирует, что diffне заглядывает внутрь подкаталогов.

Или попробуйте это, если вы смелы;)

diff -u <(find dir1/ -maxdepth 1 -type d -exec basename {} \;) <(find dir2/ -maxdepth 1 -type d -exec basename {} \;)
2
27.01.2020, 21:17

Это довольно простая задача для rsync.

rsync -n -av dir1/ dir2/ | grep '/$' | grep -Fvx './'

Это пробный запуск rsyncзагрузки содержимого dir1в dir2и отображение только строк, заканчивающихся косой чертой (в каталогах ), за исключением, возможно, верхнего -сама директория уровня.

Вот простой тест/демонстрация:

$ # create 1500 folders in dir1:
$ for i in $(jot -w %04d 1500); do mkdir -p dir1/dir-$i; done
$ # clone dir1 to dir2, then remove one directory:
$ rsync -a dir1/ dir2/
$ rmdir dir2/dir-0749/
$ # rsync -n will tell you which one is missing:
$ time rsync -n -av dir1/ dir2/ | grep '/$' | grep -Fvx './'
dir-0749/

real    0m0.038s
user    0m0.001s
sys     0m0.041s

Если вы хотите адаптировать этот метод для проверки папок, отсутствующих в dir1, но присутствующих в dir2, используйте rsyncпараметр --delete:

.
$ rmdir dir1/dir-0479/
$ time rsync -nav --delete dir1/ dir2/ | grep '/$' | grep -Fvx './'
deleting dir-0479/
dir-0749/

Строка deleting...говорит вам, что dir-0479отсутствует в dir1, но присутствует в dir2.

2
27.01.2020, 21:17

diff < (дерево -d dir _A )< (tree -d dir _B)

-1
27.01.2020, 21:17

[EDIT] После публикации я заметил, что @freedo уже упоминал commдо меня. [/ РЕДАКТИРОВАТЬ]

Первое сохранение списков деревьев каталогов в файлы:

# Using parenthesis ensures the command are executed inside a subshell, so
# changing directory (`cd`) back afterwards is not needed.

(cd dir1 ; find -type d | sort >/tmp/list1)
(cd dir2 ; find -type d | sort >/tmp/list2)

Тогда эта команда покажет, что присутствует в dir1, но не в dir2:

.
comm -23 /tmp/list1 /tmp/list2

Хотя эта команда покажет, что находится в dir2, но не вdir1:

comm -13 /tmp/list1 /tmp/list2

И это покажет, что присутствует в обоих:

comm -12 /tmp/list1 /tmp/list2

Наконец, это покажет всю информацию выше сразу, в 3 столбцах:

comm /tmp/list1 /tmp/list2

Утилита commкажется малоизвестной. Но он, вероятно, установлен по умолчанию в большинстве, если не во всех системах Linux. В Debian он находится в пакете «coreutils», который помечен как «необходимый».

Малоизвестная команда, но commоднажды оказалась очень полезной для меня, когда я решал неприятные проблемы в большой файловой системе (> 25 Tb ). Я считаю своим долгом перед commзащищать его использование.

0
27.01.2020, 21:17

Теги

Похожие вопросы