2016-04-06 9 views
0

Ich bin neu im Bash-Scripting. Die Anforderung ist ähnlich wie BASH copy all files except one. Ich versuche, alle Dateien zu kopieren, die mit Datei beginnen und eine Datei ausschließen, die mit Datei ~ (Sicherungsdatei) beginnt. Das habe ich bisher mit bash versucht.Bash: Kopieren Sie alle Dateien eines bestimmten Typs mit Ausnahme von wenigen

path1="/home/dir1/file*" (I know this * doesn't work - wildcards) 
file_to_exclude="/home/dir1/file~*" 
dest=/var/dest 

count=`ls -l "$path1" 2>/dev/null | wc -l` 
if [ $count !=0 ] 
then 
    cp -p !$file_to_exclude $path1 $dest (Not sure if this is the way to exclude backup file) 
fi 

Könnte mir bitte jemand helfen, wie das zu lösen?

+1

wie etwa 'cp -p

cp -p /home/dir1/file[^~]* /var/dest/ 

Oder, wenn Sie nur Dateien wollen home/dir1/datei [^ ~] * $ dest'? – Abdulrahman

Antwort

0

versuchen, etwas wie folgt aus:

file_to_exclude="some_pattern" 
all_files=`ls /home/dir1/file*` 
for file in $all_files; do 
    if [ "$file" != "$file_to_exclude" ]; then 
     cp $file /some/path 
    fi 
done 
+0

[Parsing ls gilt als schädlich.] (Http://mywiki.wooledge.org/ParsingLs) –

+0

ja. es ist. Hast du einen anderen Vorschlag, wie man eine Liste von Dateien bekommt? – alnet

+0

'all_files = (*)'. Jetzt haben Sie ein Bash-Array und müssen sich keine Sorgen über Leerraumprobleme machen, bis Sie jedes Mitglied erweitert haben. –

3

Verwendung find

find . -maxdepth 1 -type f -size +0 ! -name *~* -exec cp {} dest \; 

statt Linie zählen diese Prüfungen erstrecken sich von Null verschiedene Größe.

Ziel ist das Zielverzeichnis.

0

ich als keinen Grund für Komplikation sehen, könnte es so einfach sein:/mit Erweiterungen

cp -p /home/dir1/file[^~]*.* /var/dest/ 
Verwandte Themen