Я пишу простой скрипт, который возьмет ключевое слово. Затем он будет искать файлы в каталоге, содержащие это ключевое слово, и копировать их в другой каталог (имя каталога = ключевое слово).
Ключевое слово передается как аргумент командной строки. Вот мой скрипт:
#!/bin/bash
# start
mkdir $1
cp `grep -Ril \"$1\"` $1
Кажется, у меня возникла ошибка в cp
команде:
missing destination file operand
Как исправить эту ошибку?
Спасибо!
решение1
Решение в ответе Майка в основном верное, однако я бы немного изменил его, чтобы создать каталог только в том случае, если grep что-то найдет, тем самым предотвращая появление пустых каталогов.
#!/bin/bash
filenames=$(grep -Ril "$1")
[ $? -eq 0 ] && mkdir "$1"
for file in $filenames; do
cp "$file" "$1"
done
решение2
Вот правильный способ:
#!/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
решение3
Вы можете попробовать использовать find:
mkdir "$1"
find . -type f -name "*$1*" -exec cp {} path/to/"$1" \;