在 crontab 上使用带否定 (!) 的 cp 命令时出现问题
Problem using cp command with negation (!) on crontab
#!/bin/bash
cd /var/www/html/tpd
cp -pr !(edc|dti|swb|audio|blog|buy|dpt|dpt.git|dpt-staging-server|dti_old|images|images2|images_linkshare|smarty-3.1.30|swb.com|swb.com.temp|talent|template_c|video|yout|yout-admin|All_About_Your_Canine_Friend.pdf|Canine_Cuisine.pdf|definitiveguide.pdf|GroomingYourDogAtHome-FreeReport.pdf|HowToStopYourPuppyOrOlderDogFromBiting.pdf|Network Merchants API.pdf|SuperDogsandPuppies.pdf|TopDogs.pdf|UltimateBreedGuide.pdf|10CommonProblemsofAdultDogs.pdf|10CommonProblemsofPuppies.pdf|45commonlyaskedquestionsondoggrooming.pdf|g.tar.gz|h.tar.gz|dti_back.tar.gz|Canine_Cuisine.zip|deluxe_version.zip|h.zip|StyleXPInstallMale.zip|UltimateBreedGuide.zip|videotranscripts.zip|101ways.zip) weeklyBackup
tar -cvf weeklyBackup.tar.gz weeklyBackup
rm -rf weeklyBackup
我每周只备份一些选定的文件,这是我正在使用的脚本。当手动 运行 时它工作得很好但是当我输入这是一个 crontab 时,它 returns 一个错误行 3: syntax error near unexpected token `('
语法 !(name1|name2|name3)
就是所谓的 "extglob"。这是 bash 的可选扩展,默认情况下未启用。
要启用此语法,您需要 运行(作为脚本中的前一行):
shopt -s extglob
大概您的点文件已经在为交互式 shell 执行此操作,这就是语法对您开箱即用的原因。 (还要确保如果您的脚本是从带有 sh scriptname
的 cron 调用的,则使用 bash scriptname
代替,或者修改代码以遵守 shebang)。
#!/bin/bash
cd /var/www/html/tpd
cp -pr !(edc|dti|swb|audio|blog|buy|dpt|dpt.git|dpt-staging-server|dti_old|images|images2|images_linkshare|smarty-3.1.30|swb.com|swb.com.temp|talent|template_c|video|yout|yout-admin|All_About_Your_Canine_Friend.pdf|Canine_Cuisine.pdf|definitiveguide.pdf|GroomingYourDogAtHome-FreeReport.pdf|HowToStopYourPuppyOrOlderDogFromBiting.pdf|Network Merchants API.pdf|SuperDogsandPuppies.pdf|TopDogs.pdf|UltimateBreedGuide.pdf|10CommonProblemsofAdultDogs.pdf|10CommonProblemsofPuppies.pdf|45commonlyaskedquestionsondoggrooming.pdf|g.tar.gz|h.tar.gz|dti_back.tar.gz|Canine_Cuisine.zip|deluxe_version.zip|h.zip|StyleXPInstallMale.zip|UltimateBreedGuide.zip|videotranscripts.zip|101ways.zip) weeklyBackup
tar -cvf weeklyBackup.tar.gz weeklyBackup
rm -rf weeklyBackup
我每周只备份一些选定的文件,这是我正在使用的脚本。当手动 运行 时它工作得很好但是当我输入这是一个 crontab 时,它 returns 一个错误行 3: syntax error near unexpected token `('
语法 !(name1|name2|name3)
就是所谓的 "extglob"。这是 bash 的可选扩展,默认情况下未启用。
要启用此语法,您需要 运行(作为脚本中的前一行):
shopt -s extglob
大概您的点文件已经在为交互式 shell 执行此操作,这就是语法对您开箱即用的原因。 (还要确保如果您的脚本是从带有 sh scriptname
的 cron 调用的,则使用 bash scriptname
代替,或者修改代码以遵守 shebang)。