У меня есть файл настроек, который нужно переместить в соответствующее место. например. settings.location1, settings.location2, settings.location3, которым необходимо перейти в соответствующие папки, а именно location1, location2 и location3, и их переименовать в простые настройки.Используйте find exec с sed, чтобы заменить часть имени файла и скопировать его
например.
/some/path/settings.location1 ->/другие/путь/LOCATION1/Настройки
/some/path/settings.location2 ->/другие/путь/LOCATION2/Настройки
Я пришел со следующим номером:
find /some/path/settings.* -exec cp {} /other/path/$(echo {} | sed 's/.*\.//')/settings \;
Но по какой-то причине sed не выполняется. И результат:
cp: cannot create regular file `/other/path//some/path/settings.location1/settings': No such file or director
Кажется, что если я запускаю их отдельно, все команды выполняются хорошо, но не если я вставляю exec. Что я делаю не так?
Привет, это/другие/путь/некоторые/путь уже существует? В противном случае cp не будет создавать промежуточную папку для завершения пути. Также: учтите, что результатом поиска является полный путь, а не только имя файла. –
Привет, Франческо, нет, этого не существует, но все дело в том, что он должен генерировать назначение как/other/path/location1/settings, а не размещать здесь весь «/ some/path». И/other/path/location1 существует. – teapothat
Ваш '$ (echo ...)' выполняет * один раз *, когда запускается команда 'find'. Вы хотите, чтобы он запускался один раз для каждого значения '{}', но этого не происходит. Для этого вам нужно заставить оболочку использовать команду '-exec''d. –