Я использую Red Hat Release 6.5 (Сантьяго). Проблема, с которой я сталкиваюсь, заключается в том, что у меня есть куча файлов в следующей структуре каталогов:

temp2
├── ABC
│   └── temp2
│       └── temp2.txt
└── DEF
    └── temp2
        └── temp2.txt

Я пытаюсь изменить его на структуру, как показано ниже, но не знаю, как это сделать.

temp2
├── ABC.txt
└── DEF.txt

Любая помощь будет принята с благодарностью!

2 ответа2

1

Вам нужно создать небольшой файл сценария, чтобы переименовать / переместить: назовите его, скажем, rnmv и поместите в него следующую команду:

f="${1#./}"; echo mv "$f" "${f%%/*}.${f##*.}"

Не забудьте chmod +x rnmv . Затем перейдите в корневой каталог и вызовите rnmv из команды find :

cd {wherever temp2 root is}
find . -name "temp2.txt" -exec rnmv "{}" \;

Когда вы будете довольны созданием правильных команд mv , удалите echo из rnmv и ваше переименование / перемещение будет выполнено.

Последняя задача - удалить пустые подкаталоги:

find . -name temp2 -exec rmdir "{}" \;

Это безопасно, так как rmdir не удалит каталог с файлами в нем. В зависимости от порядка поиска каталогов, вам может потребоваться повторить команду для таких структур, как ABC/temp2/temp2, так как temp2 не будет пустым, пока не будет удалена вторая.

Обратите внимание, что, если, скажем, ABC имеет более одного файла temp2.txt в своих подкаталогах, каждая команда mv будет перезаписывать предыдущий ABC.txt, и после этого останется только последняя найденная.

0
mv /temp2/ABC/temp2/temp2.txt /temp2/ABC.txt
mv /temp2/DEF/temp2/temp2.txt /temp2/DEF.txt

В зависимости от того, где находится высокоуровневый каталог temp2 - я не могу сказать из вашего примера.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .