Bash:复制除少数几种类型的所有文件

时间:2016-04-06 15:41:26

标签: bash

我是bash脚本新手。该要求类似于BASH copy all files except one。我试图复制所有以file开头的文件,并排除一个以file~(备份文件)开头的文件。这是我迄今为止用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

有人可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:3)

使用find

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

而非行计数,此检查大小为非零。

dest是目标目录。

答案 1 :(得分:0)

尝试这样的事情:

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

答案 2 :(得分:0)

我没有看到引起并发症的原因,它可能很简单:

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

或者,如果您只想要带扩展名的文件

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