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 cp
Befehl 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" \;