Переместить файлы с расширением в другую структуру

Мне нужно переместите каждый file.tif в каталог TIFF внутри его родительского каталога.

    ├── 1
    │   ├── 240_01.tif
    │   ├── 240_02.TIF
    │   └── TEST
    │       └── syg_240_test_1.tif
    ├── 2-3
    │   ├── 2
    │   │   ├── 240_01.tif
    │   │   ├── 240_02.TIF
    │   │   └── TEST
    │   │       └── syg_240_test_1.tif
    │   └── 3
    │       ├── 240_01.tif
    │       ├── 240_02.TIF
    │       └── TEST
    │           └── syg_240_test_1.tif
    └── 4
        ├── 240_01.tif
        ├── 240_02.TIF
        └── TEST
            └── syg_240_test_1.tif

Например, это должно выглядеть так:

├── 1
│   ├── TEST
│   │   └── syg_240_test_1.tif
│   └── TIFF
│       ├── 240_01.tif
│       └── 240_02.TIF
├── 2-3
│   ├── TEST
│   │   └── syg_240_test_1.tif
│   └── TIFF
│       ├── 2
│       │   ├── 240_01.tif
│       │   └── 240_02.TIF
│       └── 3
│           ├── 240_01.tif
│           └── 240_02.TIF
└── 4
    ├── TEST
    │   └── syg_240_test_1.tif
    └── TIFF
        ├── 240_01.tif
        └── 240_02.TIF

Я пытаюсь использовать mv /path/*/*.tif/ /path/*/TIFF/*.tif, но это не так. работай.

1
задан 2 July 2021 в 10:19

1 ответ

И снова на помощь может прийти find. Вы можете выборочно найти tiff файлы во вложенных папках первого уровня, затем использовать команду -execdir, которая перемещает найденный файл в папку TIFF в текущем каталоге.

Можно вызвать небольшой сценарий, который проверяет существование папки TIFF или создает ее перед перемещением всех файлов tiff, но для данного случая, вероятно, проще работать в два этапа: 1) создать папку TIFF в любой из нужных вам папок и 2) переместить туда файлы TIFF

find . -maxdepth 1 -type d -path '*/*' -exec mkdir {}/TIFF \;

найдет папки "1", "2" и т.д. при условии, что ваша текущая директория содержит эти папки, и создаст каталог TIFF в каждой из них. Если папка TIFF уже существует, будет выдано сообщение об ошибке.

Вторая команда может затем переместить все tiff файлы во вновь созданные папки:

find . -type f -ipath '*/*/*.tif' -execdir mv {} TIFF \;

Здесь мы ищем файлы только (-type f) в папках "1", "2" и т.д., но не ниже, из-за шаблона файлов (-ipath). -ipath в отличие от -path указывает на то, что совпадение не чувствительно к регистру. Действие -execdir выполняет следующую команду, однако в качестве текущей папки используется папка найденного файла. {} обозначает найденный файл. Из-за действия -execdir это только основное имя файла. Файл будет перемещен в папку TIFF в текущей папке.

Пробелы в имени файла будут правильно обработаны маркером {}. Нет необходимости вставлять кавычки, хотя вы могли бы.

1
ответ дан 28 July 2021 в 11:22

Другие вопросы по тегам:

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