[英]Find command works from command line but not in a script
我正在研究一個需要每晚運行的進程,它將tar.gz包含大量文件(對於tar命令而言太大)。 要解決此問題,我可以創建一個我希望tar存檔並傳遞給它的文件列表。我通常手動執行此操作,但是我想使用crontab將其自動化。
在這種情況下,操作系統為RedHat Enterprise 6.3(聖地亞哥)。
我有以下bash shell腳本:
#!/bin/bash
now=$(date +"%Y%m%d")
TARGET_DIR=/usr/share/data
FILE_LIST=/home/user/txt-files/data-as-of-$now.txt
if [ -e $FILE_LIST ];
then
rm -rf $FILE_LIST
fi
CMD="find $TARGET_DIR -regextype posix-extended -regex \".*/$now.*\" -fprint $FILE_LIST"
echo $CMD
findCmd=`$CMD`
if [ $? -ne 0 ];
then
echo "command failed; $findCmd"
fi
該腳本可以正常運行,但不會向-fprint參數中指定的文件寫入任何內容。 如果我使用已回顯的命令並將其復制並粘貼到cli,它的工作方式將與我期望的一樣,並且我的文件包含了我想要的文件列表。
find /usr/share/data -regextype posix-extended -regex ".*/20140624.*" -fprint /home/user/txt-files/data-as-of-20140624.txt
我猜想正則表達式有些時髦,當作為腳本而不是CLI的命令運行時,正則表達式會被錯誤地解釋。 我在其他主題中讀過有關將星號括在引號中的需要,並且我嘗試了單刻度和雙刻度,但似乎都沒有用。 我還嘗試了執行命令的后退標記方式和$()方式,兩者均產生相同的結果。
如果我收到任何錯誤或消息,這將減少混亂。 如果有人可以看看我是否在做明顯地錯誤的事情,我將非常感謝您的指導!
如果我使用bash -x運行命令,則會得到以下輸出:
[user@data-provider bin]$ bash -x tgz2.sh
++ date +%Y%m%d
+ now=20140624
+ TARGET_DIR=/usr/share/data
+ FILE_LIST=/home/user/txt-files/data-as-of-20140624.txt
+ '[' -e /home/user/txt-files/data-as-of-20140624.txt ']'
+ rm -rf /home/user/txt-files/data-as-of-20140624.txt
+ CMD='find /usr/share/data -regextype posix-extended -regex '\''.*/20140624.*'\'' -fprint /home/user/txt-files/data-as-of-20140624.txt'
+ echo find /usr/share/data -regextype posix-extended -regex ''\''.*/20140624.*'\''' -fprint /home/user/txt-files/data-as-of-20140624.txt
find /usr/share/data -regextype posix-extended -regex '.*/20140624.*' -fprint /home/user/txt-files/data-as-of-20140624.txt
++ find /usr/share/data -regextype posix-extended -regex ''\''.*/20140624.*'\''' -fprint /home/user/txt-files/data-as-of-20140624.txt
+ findCmd=
+ '[' 0 -ne 0 ']'
在腳本中切換至僅以下語法,無需分配任何變量,即可解決此問題。
find $TARGET_DIR -regextype posix-extended -regex ".*/$now.*" -fprint $FILE_LIST
我測試過的原始語法有問題
cmd="find -regex '.*/test.*' -fprint out.txt
$cmd
是它像
find -regex ''\''.*/test.*'\''' -fprint out.txt
但不能完全確定為什么變量替換會添加錯誤的單引號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.