cp не правильно оценивает имя dirname в операции поиска

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

Игнорируя часть удаления сейчас, это то, что у меня есть до сих пор:

find /path/to/searchdir -name "file.rtf" -exec cp -v "/path/to/filetocopy.rtf" `dirname {}` \; 

К сожалению, я не могу заставить его правильно оценить имя dirname, так как он возвращает «.». для любых экземпляров файла, который он находит.

Я уверен, что это что-то простое, но я все еще новичок, когда дело доходит до сценариев bash, поэтому я не знаю, почему. Я пробовал различные варианты выше, но безрезультатно.

One Solution collect form web for “cp не правильно оценивает имя dirname в операции поиска”

find -s -execdir кажется более подходящим:

 find /path/to/searchdir -name file.rtf -execdir cp -v /path/to/filetocopy.rtf . \; 

Это запустит cp из каждого найденного каталога, содержащего файл с именем file.rtf . как видно из cp будет являться соответствующим каталогом каждый раз, когда выполняется cp .

Затем вы можете добавить -delete для удаления файла (после проверки всех действий).

Причина, по которой ваш подход не работает, заключается в том, что оболочка оценивает имя dirname {} перед запуском find и dirname {} . , Так

 find /path/to/searchdir -name "file.rtf" -exec cp -v "/path/to/filetocopy.rtf" `dirname {}` \; 

становится

 find /path/to/searchdir -name "file.rtf" -exec cp -v "/path/to/filetocopy.rtf" . \; 
  • Env-переменные не загружаются в bash
  • текст для создания файла xls
  • Форматирование цикла
  • Как я могу определить, какое устройство или имя файла я перенаправляю
  • Условное выполнение - запуск постоянных подпроцессов и коротинов
  • Печать строк между двумя шаблонами, соответствующими условию в awk
  • Сценарий для регистрации температуры
  • Если условие с командой ssh ​​внутри
  • Как я могу удалить файл защиты, сделанный tee?
  • Переменная окружения для ip-адреса
  • Сравнивая значение в том же столбце и направляя вывод в новый столбец
  • Interesting Posts

    Выбор последних файлов и группировка по имени

    ssh -D на мой сервер

    Как я могу клонировать конкретное рабочее пространство для других выходов?

    Почему система останавливает сервис сразу после его запуска?

    Настроить xterm для использования ctrl + shift + c / ctrl + shift + v для копирования / вставки?

    Невозможно подключиться к беспроводной сети с помощью Ralink MT7601

    Почему smbpasswd находится в пакете samba-client?

    Может ли rsyslogd записывать несколько именованных каналов

    По умолчанию оболочка в Oracle Linux?

    Сценарий Bash для обнаружения, когда мой сервер отключен или отключен

    Cracking root user: автоматизация входа в root с помощью «su» от пользователя nonroot

    Как настроить MTU для всех сетевых адаптеров через скрипт?

    Открыть любое приложение с BASH

    Как я могу scp файл, который мой пользователь не может прочитать, но я могу sudo?

    почему завершение не работает для всех псевдонимов?

    Linux и Unix - лучшая ОС в мире.