it-swarm.com.de

Kopieren Sie alle Dateien von einer bestimmten Dateierweiterung im Skript

Ich versuche, den folgenden Befehl in einem Shell-Skript auszuführen, in dem adir="mydir" und extType=*.txt

cp "$adir/$extType" "$destination"

Ich bekomme jedoch:

cp: cannot stat ‘mydir/*.txt’: No such file or directory

aber es gibt ein solches verzeichnis und wenn ich es von hand in der befehlszeile ausführe, funktioniert es.

Irgendwelche Ideen, was ist los?

3
Jocky Doe

Sie sollten "$adir/$extType" in "$adir/"$extType ändern, da andernfalls keine Glob-Erweiterung stattfindet und genau nach einer Datei mit dem Namen *.txt gesucht wird, die nicht gefunden werden kann, und sich daher darüber beschwert :

cp: cannot stat ‘mydir/*.txt’: No such file or directory
7
Ravexina

Ravexina hat bereits gut darauf hingewiesen, dass das Globbing nicht in doppelten oder einfachen Anführungszeichen funktioniert und dass die cp-Syntax für mehrere Dateien/ein einzelnes Ziel und die Option -t falsch ist.

Als Alternative können Sie Bash-Arrays verwenden:

extType=( "$adir"/*.txt )
cp -t "$destination"   "${extType[@]}" 

Alternativ Schleife

for i in "$adir"/*.txt ; do cp "$i"  "$destination"; done
2