我正在查看一些遗留代码,但无法弄清楚它的用途:
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
解压缩命令后反斜杠\做什么?为什么要继续解压缩命令?
此外,剪切使用自定义标记(正斜杠/)并提取第二列,然后重定向到/dev/null
?为什么呢?
注意:我在OS X上。
答案 0 :(得分:1)
反斜杠可以逃避行尾,因此命令可以继续到下一行。您的代码以这种方式解释:
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
>/dev/null
正在从解压缩命令重定向stdout,而不是切换。 unzip -q
(安静模式)我相信会做同样的事情。看起来这是一次尝试压制“不匹配”的失败尝试。错误被抛出。使用2>/dev/null
。grep $date $DIR/files.eng | cut -d/ -f2
是替代命令;不推荐使用返回刻度而使用$( )
方法。它目前代表"列表"根据解压缩用法: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;
grep $date $DIR/files.eng | xargs -n1 basename
尝试使用:
unzip /mnt/cdrom/${date}.zip $(grep ${date} ${DIR}/files.eng | xargs -n1 basename) 2>/dev/null
修改强>:
澄清一下,正如我看到一些关于草率编程的评论;它很草率,但语法方面并不完全错误。它定位了要更新的特定预定文件。不会提取与列表不匹配的.zip文件的其他内容。你的解压缩参数如下:
$1 zipped_file="/mnt/cdrom/${date}.zip"
$2 include_list="$(grep ${date} ${DIR}/files.eng | xargs -n1 basename)"
$3 exclude_list=