Як правильно скопіювати файли і папки виключаючи деякі з них

Топік написаний у відповідь на схожий.

Але головна проблема цього підходу в іншому - він не відповідає ідеології unix: складні завдання вирішуються комбінацією простих утиліт.

А тепер про те, як потрібно робити.

0. Декомпозиція

1. Отримання списку файлів

Зазвичай ми переглядаємо список файлів програмою ls. Її висновок виглядає приблизно так:

Чи підходить там такий висновок? Ні, тому, що в ньому недостатньо інформації - нам потрібно копіювати файли рекурсивно, значить для нас було-б набагато зручніше якщо перша в нашому ланцюжку програма видала там імена файлів разом з шляхами.

Наступна програма, яка приходить на розум - find

Вже краще але в висновок потрапили і директорії, а вони нам не потрібні. Спробуємо так:

Ось те, що там потрібно. Список файлів.

2. Фільтрація

Цей список файлів потрібно відфільтрувати. Переспрямуємо висновок нашої попередньої комманди в програму grep.

Добре, але в умовах завдання варто виключати файли, так що трохи поменеяем наш конвеєр

Перші дві частини виконані.

З man-сторінки для команди cp ми можемо дізнатися, що вихідний файл потрібно передавати програмі cp як аргумент, а ми поки можемо тільки перенаправити список на стандартне введення.
Застосуємо утиліту xargs - вона приймає стандартний ввід і викликає зазначену програму з параметрами зі стандартного вводу. Отже:

-n 1 означає, що тільки один рядок зі стандартного вводу підставляється в комманду, а -I% - визначає символ, який буде замінений в цільової комманде на сходинку зі стандартного вводу. У нашому випадку це буде

замість висновку

Я сподіваюся що це опис допоможе правильно підходити до вирішення як таких простих так і більш комплексних завдань.

Хочеться відзначити, що

  • Цей спосіб далеко не Едіственний і навіть не найкоротший, а найбільш наочний для демонстрації методології рішення.
  • Особисто я скористався-б tar --exclude = 2 -cf - ./ | (Cd / path / to / dest / tar -xvf -)
  • Оскільки це перший мій топік, буду радий конструктивній критиці

Схожі статті