Переміщення двох певних файлів у його батьківську папку в декількох каталогах з унікальними іменами


2

Мені потрібно перемістити два конкретні файли, ми назвемо їх fileA.txt і fileB.sh у свою батьківську папку.

Один з цих файлів є загальним, але інший файл є специфічним для його батьківської папки, і його неможливо скопіювати у всі папки.

Ієрархія папок виглядає так: Ієрархія папок

Батьківська папка є унікальною і має залишатися такою ж. Всього понад 2000 папок, розташованих у папках з 200-300 батьківських папок, що містять дочірні папки

Я маю досі, що в BASH це не працює:

find -maxdepth 4 -type f -name ‘*.bb ‘*.txt’; mv ../.

Я ДУЖЕ новачок сценаріїв і знаю, що це дуже просте завдання. Прошу вибачення за жахливий малюнок, але я занадто довго бив головою об стіну.

Відповіді:


3

Щоб перемістити будь-який файл з ім'ям fileA.txtабо fileB.txtдо його безпосереднього батьківського каталогу:

find . -maxdepth 4 -type f -name 'file[AB].txt' -execdir mv {} ../ \;

Або перенести будь-який файл з ім'ям fileA.txtабо fileB.bbдо його безпосереднього батьківського каталогу:

find . -maxdepth 4 -type f \( -name 'fileA.txt' -o -name 'fileB.bb' \) -execdir mv {} ../ \;

Як це працює

  • .повідомляє findпочати з поточного каталогу. (Ви можете замінити це будь-яким каталогом, який вам подобається.

  • -maxdepth 4говорить findне спускатися більш ніж на чотири рівні вглиб структури каталогів.

  • -type f говорить findшукати лише звичайні файли.

  • -name 'file[AB].txt'говорить findшукати лише файли, які відповідають глобусу file[AB].txt.

    Альтернативно, щоб відповідати або, fileA.txtабо fileB.bbми використовуємо два -nameтести в поєднанні з логічним або ( -o) та згрупованими разом з паронами:

    \( -name 'fileA.txt' -o -name 'fileB.bb' \)
  • -execdir mv {} ../ \;повідомляє findchdir до каталогу файлів і запустить команду shell, mv {} ../де findзамінить {}фактичне ім'я файлу. Вираз ../є Unix-говорить для батьківського каталогу. Закінчення \;лише позначає findкінець команди оболонки


Яка неймовірно добре пояснена відповідь! Я зрозумів альтернативне рішення, яке не працює так широко, але я збираюся створити кілька тестових папок і спробувати це ще раз, щоб я міг навчитися цьому. Дуже дякую!
Дж. Майк

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

1
@ J.Mike Хоча письмові подяки є приємними і, ймовірно, оцінені відповідачем, відмінним способом продемонструвати подяку за допомогу людини є вибір їх відповіді як прийнятої (якщо, звичайно, ти вважаєш, що це заслуговує). Ось корисний посібник про те, що робити, коли хтось відповість на ваше запитання .
CJK
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.