コマンドライン引数を使用したコマンドのコピー

コマンドライン引数を使用したコマンドのコピー

私はキーワードを使用する簡単なスクリプトを書いています。次に、ディレクトリでそのキーワードを含むファイルを見つけて、別のディレクトリ(ディレクトリ名=キーワード)にコピーします。

このキーワードはコマンドライン引数として渡されます。これは私のスクリプトです。

#!/bin/bash
# start

mkdir $1
cp `grep -Ril \"$1\"` $1

cp私のコマンドにエラーがあるようです。

missing destination file operand

このエラーをどのように修正できますか?

ありがとうございます!

答え1

Mikeの答えに対する解決策はほとんど正確ですが、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" \;

関連情報