#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. Да. Это то, что я прочитал, как описано в оригинальном посте.