使用解压缩、grep 和剪切

Using unzip, grep and cut

我正在查看一些遗留代码,但无法弄清楚它的用途:

for date in 19960822 19960823 19960824 19960825 19960826 \
        19960827 19960828 19960829 19960830 19960831
do
   echo "copying files from date $date..."
   unzip /mnt/cdrom/$date.zip \
  `grep $date $DIR/files.eng | cut -d/ -f2` > /dev/null
done

unzip 命令后的反斜杠 \ 是做什么用的?为什么要继续解压缩命令?

此外,cut 使用自定义标志(正斜杠 /)并提取第二列,然后重定向到 /dev/null?为什么?

注意:我在 OS X.

反斜杠可以转义行尾,因此命令可以继续到下一行。您的代码以这种方式解释:

for date in 19960822 19960823 19960824 19960825 19960826 19960827 19960828 19960829 19960830 19960831
do echo "copying files from date $date..."
   unzip /mnt/cdrom/$date.zip `grep $date $DIR/files.eng | cut -d/ -f2` > /dev/null
done
  1. >/dev/null 从解压缩命令重定向标准输出,而不是剪切。 unzip -q(安静模式)我相信会做同样的事情。看起来这是抑制抛出的 'not matched' 错误的失败尝试。使用 2>/dev/null.
  2. grep $date $DIR/files.eng | cut -d/ -f2是替换命令;反引号已弃用,取而代之的是 $( ) 方法。根据解压缩用法,它目前代表"list":Usage: unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir] Default action is to extract files in list, except those in xlist, to exdir;
  3. '/'是剪切的分隔符。它在这里的目的是删除文件路径,因此替换命令 returns 只有文件名。更好的方法是使用 xargs 和 basename:grep $date $DIR/files.eng | xargs -n1 basename
  4. unzip 仅抛出 'not matched' 错误,因为压缩文件不包含在 files.eng.
  5. 中找到的 xml 文件名

尝试使用:

unzip /mnt/cdrom/${date}.zip $(grep ${date} ${DIR}/files.eng | xargs -n1 basename) 2>/dev/null

编辑:

澄清一下,因为我看到许多关于草率编程的评论;它很草率,但在语法方面并不完全不正确。它针对特定的、预定的文件进行更新。不会提取与列表不匹配的 .zip 文件的其他内容。您的解压缩参数如下:

 zipped_file="/mnt/cdrom/${date}.zip"
 include_list="$(grep ${date} ${DIR}/files.eng | xargs -n1 basename)"
 exclude_list=