Kopierbefehl mit Befehlszeilenargumenten

Kopierbefehl mit Befehlszeilenargumenten

Ich schreibe ein einfaches Skript, das ein Schlüsselwort entgegennimmt. Dann sucht es im Verzeichnis nach Dateien, die dieses Schlüsselwort enthalten, und kopiert sie in ein anderes Verzeichnis (Verzeichnisname = Schlüsselwort).

Das Schlüsselwort wird als Befehlszeilenargument übergeben. Hier ist mein Skript:

#!/bin/bash
# start

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

Bei mir scheint ein Fehler mit dem cpBefehl zu vorliegen:

missing destination file operand

Wie kann ich diesen Fehler beheben?

Danke!

Antwort1

Die Lösung in Mikes Antwort ist größtenteils richtig, ich würde sie jedoch leicht ändern, um das Verzeichnis nur zu erstellen, wenn grep etwas findet, wodurch die leeren Verzeichnisse verhindert werden

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

Antwort2

So geht's richtig:

#!/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

Antwort3

Sie könnten versuchen, find zu verwenden:

mkdir "$1"
find . -type f -name "*$1*" -exec cp {} path/to/"$1" \;

verwandte Informationen