Копировать команду с аргументами командной строки

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

Ключевое слово передается как аргумент командной строки. Вот мой сценарий:

#!/bin/bash # start mkdir $1 cp `grep -Ril \"$1\"` $1 

У меня, похоже, есть ошибка с командой cp :

 missing destination file operand 

Как я могу исправить эту ошибку?

Благодаря!

3 Solutions collect form web for “Копировать команду с аргументами командной строки”

Решение в ответе Майка в основном правильное, однако я бы немного изменил его, чтобы создать каталог, только если grep найдет что-то, что предотвратит пустые каталоги

 #!/bin/bash filenames=$(grep -Ril "$1") [ $? -eq 0 ] && mkdir "$1" for file in $filenames; do cp "$file" "$1" done 

Это правильный способ:

 #!/bin/bash mkdir "$1" filenames=$(grep -Ril "$1") if [ $? -eq 0 ] ; then echo "$filenames" | while IFS= read -r line ; do cp "$line" "$1" done fi 

Вы можете попытаться использовать find:

 mkdir "$1" find . -type f -name "*$1*" -exec cp {} path/to/"$1" \; 
  • Пытаться направить содержимое переменной в команду дает Ambigious Redirect
  • Выполнить строку из сценария оболочки как набор команд оболочки
  • Сценарий оболочки говорит о том, когда нужно выполнить в следующий раз
  • Описание списка пакетов
  • Если условие не работает в скрипте над ssh
  • Разделить вход для другой команды и объединить результат
  • Bash Script для отображения разницы между двумя текстовыми файлами
  • Вырезать письмо из каждой строки файла
  • Как безопасно искать $ HOME / .bashrc?
  • mv: не обнаружено, когда выполняется из сценария, который изменяет переменную PATH
  • Unix bash скрипт проверяет пустые файлы gz
  • Interesting Posts

    Как я могу изменить язык в хроме?

    Невозможно запустить 'kill – – $$' в моем скрипте оболочки, когда я его использую

    Подключенная мышь увеличивает время загрузки

    FreeBSD 10: Мне нужны тюрьмы?

    Интерпретация имени библиотеки `man` C

    Неожиданное поведение cp -a по символическим ссылкам

    Как я могу сделать спаривание программы 'ltunify' постоянной?

    Изменение звукового устройства по умолчанию в Pulseaudio

    Увеличение переменной с помощью скрипта Bash

    Может ли Xmonad лечить и править по-другому?

    Показать использование ядра ЦП для родительского процесса и его дочерних процессов

    Виртуальный eth-адаптер в конфигурации сети

    Захват файлов текстового журнала в journald

    Помогите диагностировать очень медленный сеанс Remmina для виртуальной виртуальной машины VM

    Как вы помните последний (n-й?) Переданный аргумент предыдущей команды, которую вы использовали с bash?

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