Как обрабатывать дополнительные каталоги в оболочке bash

#bash #shell

Вопрос:

У меня есть zip-файл с именем agent-20.1.80.8366.zip, когда я извлекаю этот zip, он предоставляет дополнительный каталог внутри родительского каталога, как показано ниже:

агент-20.1.80.8366/агент-20.1.80.8366/файлы

Я хотел бы извлечь и переместить файлы из дочернего каталога в его родительский каталог и удалить этот пустой дочерний каталог, а затем я хочу передать этот путь в качестве переменной.

Пожалуйста, кто-нибудь, помогите с фрагментом bash, который должен строго проверяться и выполняться, а затем родительский путь должен храниться в переменной

ожидаемый результат будет:

агент-20.1.80.8366/файлы

Комментарии:

1. Вы забыли написать, какую команду вы использовали для распаковки архива. Может быть, вам нужно что-то вроде unzip -j agent-20.1.80.8366.zip ?

2. Можете ли вы объяснить, что вы подразумеваете под «проверкой»? Кроме того, вы хотите сказать, что хотите, чтобы процедура работала для произвольного числа дочерних каталогов? Вы знаете, как писать циклы в bash?

Ответ №1:

 $ mv agent-20.1.80.8366/agent-20.1.80.8366/files agent-20.1.80.8366/files
$ rmdir agent-20.1.80.8366/agent-20.1.80.8366
 

Это не сработает, если agent-20.1.80.8366/agent-20.1.80.8366 оно не пустое, что имо хорошо, так как вы предполагаете, что оно будет пустым, если files его переместить.

Комментарии:

1. Это не поможет проверить и переместить, потому что, если будет создано 2 дополнительных каталога вместо 1 дополнительного каталога.

2. @CSR : В своем вопросе вы упомянули, что хотите переместить только один каталог после распаковки, что означает, что вы хотите, чтобы остальные каталоги остались нетронутыми. Если это не так, пожалуйста, объясните, чего именно вы хотите достичь.

Ответ №2:

Используя поиск, сначала переместите файл на один уровень выше

 find agent-20.1.80.8366/agent-20.1.80.8366 -type f -execdir  mv -f '{}' .. ;
 

Затем с помощью функции найти удалите оставшийся каталог

 find agent-20.1.80.8366 -type d -name "agent-20.1.80.8366" -delete
 

Комментарии:

1. найдите агент-20.1.80.8366/агент-20.1.80.8366-тип f-execdir mv-f ‘{}’ .. ; Это перемещение только файлов, но не подкаталогов

2. Да. Это то, что я прочитал, как описано в оригинальном посте.