linux shell中如何实现对多个关键字段的排除?

当前目录如下:
tanbofandeiMac:TTGr 0101-0200 tanbofan$ ls -l .zip | awk '{print $NF}'
TTGr0101.1.zip
TTGr0101.1.zip.aria2
TTGr0101.zip
TTGr0101.zip.aria2
TTGr0108.zip
TTGr0118.1.zip
TTGr0118.1.zip.aria2
TTGr0118.zip
TTGr0118.zip.aria2
TTGr0121.zip
TTGr0128.1.zip
TTGr0128.1.zip.aria2
TTGr0128.zip
TTGr0128.zip.aria2
TTGr0130.zip
TTGr0131.zip
TTGr0135.zip
TTGr0137.zip
TTGr0139.zip
TTGr0139.zip.aria2
TTGr0142.zip
TTGr0143.zip
TTGr0143.zip.aria2
TTGr0151.zip
TTGr0154.zip
TTGr0159.zip
TTGr0166.zip
TTGr0167.zip
TTGr0167.zip.aria2
TTGr0170.zip
TTGr0173.zip
TTGr0176.zip
TTGr0177.zip
TTGr0177.zip.aria2
TTGr0178.zip
TTGr0178.zip.aria2
TTGr0183.zip
TTGr0183.zip.aria2
TTGr0186.zip

想写一个脚本实现对已下载完成的文件自动解压缩,其中以“.aria2”结尾的文件为未完成文件,我能够用ls *.aria2 | cut -d'.' -f1来将这些文件名取出,但是没办法用grep -v去排除,因为grep貌似不支持多个关键字的排除。请各位帮忙看看有什么办法能够排除掉.aria2结尾的文件(包含FILENAME.zip和FILENAME.aria2)。

阅读 5.9k
5 个回答

既然已经取出文件名了,那就直接排除该文件名啊。

这样:ls *.zip | grep -vf <(ls *.aria2 | cut -d'.' -f1)

使用 ls | grep -v aria2 | awk不可以吗?

grep是可以对多个字段进行排除的哦,这样使用

grep -v -e 'proxy.php' -e 'Googlebot' -e 'HaosouSpider'

上面这个对三个关键词进行了排除

for f in *; do
    if [[ ! -f "$f.aria2" ]] ; then
        解压
    fi
end

我自己又尝试了一下,使用ls *.zip| grep -v "ls *.aria2 | cut -d'.' -f1"也是可以的,只不过我最初少了双引号。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题