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

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

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

#!/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" \; 
  • В чем разница между результатами и эффективностью после добавления -f в rm и -print в поиске?
  • verify: команда не найдена исключение при попытке получить значение от пользователя
  • Как определить, существует ли внешняя команда в сценарии?
  • Как сохранить журнал «uptime record» в Debian?
  • Ошибка сценария bash: источник: не найден
  • Как получить двоичные представления строк в Shell?
  • scp с паролем и переименование файла
  • переменная оболочки в awk не передается всем строкам, а только для самой первой строки ввода?
  • Как открыть файл с наибольшим количеством совпадений для данного регулярного выражения?
  • С помощью sed я хочу заменить первый блок текста, который соответствует
  • Создание переменной с sed в ksh
  • Linux и Unix - лучшая ОС в мире.