2016-04-06 2 views
0

bashスクリプティングは初めてです。要件はBASH copy all files except oneに似ています。ファイルで始まるすべてのファイルをコピーしようとしていますが、ファイル〜(バックアップファイル)で始まる1つのファイルを除外しています。これは私がhvaeがこれまでにbashで試したものです。Bash:少数を除いて特定のタイプのすべてのファイルをコピーする

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 

誰でもこの問題の解決方法を教えてください。代わりに、行の

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 
+1

方法でファイルをしたい場合は

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

あるいは、 home/dir1/file [^〜] * $ dest'? – Abdulrahman

答えて

0

はこのような何かを試してみてください。

destは宛先ディレクトリです。

+0

[lsの解析は有害とみなされます](http://mywiki.wooledge.org/ParsingLs) –

+0

はい。そうです。あなたはファイルのリストを取得する方法を他の提案がありますか? – alnet

+0

'all_files =(*)'。今では、bash配列を持ち、各メンバを展開するまで空白の問題を心配する必要はありません。 –

3

使用find

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

このチェックはゼロでないサイズカウント:

0

私は合併症の理由が表示されない、それはのような単純なものでした:あなたが唯一の拡張機能/ CPの-p `について

cp -p /home/dir1/file[^~]*.* /var/dest/ 
関連する問題