我正在嘗試使用find命令來搜索多個文件。我想查找文件名中包含特定字符串的目錄中的所有文件,然後tar這些文件。我想在文件名中找到的字符串是日期。如何使用find命令來搜索多個文件
舉例來說,我有一個名爲ulog.20120914.log
我現在在做一個文件名是:
DAYTWOPREV=`date +%Y%m%d --date='2 days ago'`
function archive {
cd $1;
if [ ! -d archive ]; then
mkdir archive;
fi
TMPFILE=`mktemp`;
find . -maxdepth 1 -name "${DAYTWOPREV}*" -type f -print0 > $TMPFILE;
TARFILE=archive/${DAYTWOPREV}$2.tar;
if [ ! -e $TARFILE ]; then
echo tar cfT $TARFILE /dev/null;
tar cfT $TARFILE /dev/null;
fi
cat $TMPFILE | xargs -0r tar rf $TARFILE
cat $TMPFILE | xargs -0r rm -rf
rm -f $TMPFILE;
}
當我嘗試這個,它給了我兩個檔案中的相同文件。tar – JonH
如果三個tar文件與您指定的名稱相匹配,那麼這就是正確的行爲。如果你想要所有匹配的名字,除了那些以'.tar'結尾的名字,你必須告訴'find'(或'tar')來排除你想要排除的名字。您可能還需要'-type f'選項(但tar文件無論如何都符合該標準)。 –
''* $ {DAYTWOPREV} *「'位有問題,因爲在雙引號中,shell可能會在擴展到'find'之前擴展它。但是,將它放在單引號中意味着該變量也不會擴展。編輯建議替代方案... – twalberg