キーワードを受け取る簡単なスクリプトを書いています。次に、そのキーワードを含むディレクトリ内のファイルを検索し、それらを別のディレクトリ (ディレクトリ名 = キーワード) にコピーします。
キーワードはコマンドライン引数として渡されます。これが私のスクリプトです:
#!/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" \;