- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Переиграть и победить: как анализировать конкурентов для продвижения сайта
С помощью Ahrefs
Александр Шестаков
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Есть два каталога с сотнями тысяч файлов, имеющие одинаковую структуру. Оба находятся на одном диске сервера (CentOS). Пример:
dir1/file1
dir1/subdir/file2
dir1/subdir/file3
dir2/file1
dir2/subdir/
dir2/subdir/file3
Файлы одноимённые, но не одинаковые (dir1/file1 и dir2/file1 - разные файлы).
В dir2 нет некоторых файлов, которые есть в dir1. Нужно сравнить эти два каталога, и удалить из dir1 файлы, отсутствующие в dir2 (в примере выше это файл dir1/subdir/file2, который нужно удалить).
Допускаю, что под линуксом это возможно выполнить набором команд, но самостоятельно пока не нашёл хорошего решения (разве что вариант с небольшим скриптом, который не совсем подходит из-за медленной скорости обработки - при таком количестве файлов может занять многие часы, если не сутки). Если командами не обойтись, подошёл бы и bash-скрипт, делающий это относительно быстро.
Прошу знатоков подсказать решение.
cd dir1;
find -type f | while read fname; do
[ ! -e "/path/to/dir2/$fname" ] && rm -f $fname
done
Наверно, так, но лучше сначала попробовать на кошках.
запускать rm на каждый найденный файл - замучаетесь (man xargs):
а вот test, read и echo - встроенны в большинство sh-интерпретаторов (bash, например)
Boris A Dolgov, myhand,
Спасибо большое!
myhand, Т. к. ваш вариант, судя по всему, обрабатывает быстрее, воспользовался им.
Добавив аргумент -t команде xargs - получил лог удаляемых файлов (может, кому пригодится) :)