linux - 带有变量的 rm:一个有效,下一个无效
问题描述
这真的让我发疯。我已阅读并尝试过其他问题/答案,例如:
- https://askubuntu.com/questions/823623/rm-works-on-command-line-but-not-in-script
- https://unix.stackexchange.com/questions/326584/rm-command-in-bash-script-does-not-work-with-variable
- https://unix.stackexchange.com/a/326597
但我无法让它工作。最奇怪的部分是,第一个“rm”工作得很好,但第二个什么也没做。
我正在制作一个 git-hook,以更新 Directadmin 中的自定义文件。
我的脚本以
#!/bin/bash
dirDaBase="/usr/local/directadmin/"
dirDeploy="/path/to/source/files/"
第一部分效果很好:
#### de custom files
###########################################################################
dirDA="${dirDaBase}data/templates/custom/"
dirSource="${dirDeploy}data/templates/"
showTitle "Deploy custom files to ${dirDA}"
showDir $dirDA
show "remove old files"
sudo rm -fv "${dirDA}"*.* 2>&1 | showResult
showDir $dirDA
sudo cp "${dirSource}"*.* "${dirDA}" 2>&1 | showResult
fixPermissionsFromRoot $dirDA diradmin diradmin
showReady "custom files"
注意!通常我使用rm -rf
和是showXX
辅助fixPerm...
函数
我们总是用斜杠结束路径变量......
在下一部分rm
不起作用。没有与结尾斜杠一起工作
。dirDA
由于阅读了其他问题/答案,我从下一个中删除了结尾斜杠dirDA
,希望能解决它,但它没有...... :-(
我尝试了几种格式...如您所见
#### custom scripts
###########################################################################
dirDA="${dirDaBase}scripts/custom"
dirSource="${dirDeploy}data/scripts/"
showTitle "Deploy scripts to ${dirDA}"
showDir $dirDA
show "remove old scripts try 1"
#without quotes
sudo rm -v $dirDA/*.sh 2>&1 | showResult
showDir $dirDA
show "remove old scripts try 2"
#with quotes and *.sh
sudo rm -v "${dirDA}"/*.sh 2>&1 | showResult
showDir $dirDA
show "remove old scripts try 3"
#with quotes and *.*
sudo rm -v "${dirDA}"/*.* 2>&1 | showResult
showDir $dirDA
sudo cp "${dirSource}"*.sh "${dirDA}"/ 2>&1 | showResult
fixPermissionsFromRoot $dirDA diradmin diradmin
showReady "scripts"
第一部分的输出:
************************************
deploy files to DA
************************************
Deploy custom files to /usr/local/directadmin/data/templates/custom/
list files from: /usr/local/directadmin/data/templates/custom/
total 112
drwxr-xr-x 2 diradmin diradmin 4096 May 18 13:32 .
drwx--x--x. 10 diradmin diradmin 4096 May 16 10:33 ..
-rw-r--r-- 1 diradmin diradmin 106 May 18 13:32 cust_nginx.CUSTOM.1.post
<....>
-rw-r--r-- 1 diradmin diradmin 4431 May 18 13:32 rhBasic_paths.map.conf
remove old files
removed ‘/usr/local/directadmin/data/templates/custom/cust_nginx.CUSTOM.1.post’
<....>
removed ‘/usr/local/directadmin/data/templates/custom/rhBasic_paths.map.conf’
list files from: /usr/local/directadmin/data/templates/custom/
total 8
drwxr-xr-x 2 diradmin diradmin 6 May 18 13:35 .
drwx--x--x. 10 diradmin diradmin 4096 May 16 10:33 ..
************************************
Fix root permissions to diradmin:diradmin
list files from: /usr/local/directadmin/data/templates/custom/
total 112
drwxr-xr-x 2 diradmin diradmin 4096 May 18 13:35 .
drwx--x--x. 10 diradmin diradmin 4096 May 16 10:33 ..
-rw-r--r-- 1 root root 106 May 18 13:35 cust_nginx.CUSTOM.1.post
<....>
-rw-r--r-- 1 root root 4431 May 18 13:35 rhBasic_paths.map.conf
fixed root permissions
list files from: /usr/local/directadmin/data/templates/custom/
total 112
drwxr-xr-x 2 diradmin diradmin 4096 May 18 13:35 .
drwx--x--x. 10 diradmin diradmin 4096 May 16 10:33 ..
-rw-r--r-- 1 diradmin diradmin 106 May 18 13:35 cust_nginx.CUSTOM.1.post
<....>
-rw-r--r-- 1 diradmin diradmin 4431 May 18 13:35 rhBasic_paths.map.conf
Ready fixPermissions
------------------------------------
Ready custom files
------------------------------------
第二部分的输出:
************************************
Deploy scripts to /usr/local/directadmin/scripts/custom
list files from: /usr/local/directadmin/scripts/custom
total 20
drwx------ 2 diradmin diradmin 76 May 18 12:59 .
drwx--x--x. 4 diradmin diradmin 4096 Apr 25 11:43 ..
-rwx------ 1 diradmin diradmin 161 May 18 13:32 domain_create_post.sh
-rwx------ 1 diradmin diradmin 6295 Apr 4 17:38 README
-rwx------ 1 diradmin diradmin 158 May 18 13:32 user_create_post.sh
remove old scripts try 1
rm: cannot remove ‘/usr/local/directadmin/scripts/custom/*.sh’: No such file or directory
list files from: /usr/local/directadmin/scripts/custom
total 20
drwx------ 2 diradmin diradmin 76 May 18 12:59 .
drwx--x--x. 4 diradmin diradmin 4096 Apr 25 11:43 ..
-rwx------ 1 diradmin diradmin 161 May 18 13:32 domain_create_post.sh
-rwx------ 1 diradmin diradmin 6295 Apr 4 17:38 README
-rwx------ 1 diradmin diradmin 158 May 18 13:32 user_create_post.sh
remove old scripts try 2
rm: cannot remove ‘/usr/local/directadmin/scripts/custom/*.sh’: No such file or directory
list files from: /usr/local/directadmin/scripts/custom
total 20
drwx------ 2 diradmin diradmin 76 May 18 12:59 .
drwx--x--x. 4 diradmin diradmin 4096 Apr 25 11:43 ..
-rwx------ 1 diradmin diradmin 161 May 18 13:32 domain_create_post.sh
-rwx------ 1 diradmin diradmin 6295 Apr 4 17:38 README
-rwx------ 1 diradmin diradmin 158 May 18 13:32 user_create_post.sh
remove old scripts try 3
rm: cannot remove ‘/usr/local/directadmin/scripts/custom/*.*’: No such file or directory
list files from: /usr/local/directadmin/scripts/custom
total 20
drwx------ 2 diradmin diradmin 76 May 18 12:59 .
drwx--x--x. 4 diradmin diradmin 4096 Apr 25 11:43 ..
-rwx------ 1 diradmin diradmin 161 May 18 13:32 domain_create_post.sh
-rwx------ 1 diradmin diradmin 6295 Apr 4 17:38 README
-rwx------ 1 diradmin diradmin 158 May 18 13:32 user_create_post.sh
************************************
Fix root permissions to diradmin:diradmin
list files from: /usr/local/directadmin/scripts/custom
total 20
drwx------ 2 diradmin diradmin 76 May 18 12:59 .
drwx--x--x. 4 diradmin diradmin 4096 Apr 25 11:43 ..
-rwx------ 1 diradmin diradmin 161 May 18 13:35 domain_create_post.sh
-rwx------ 1 diradmin diradmin 6295 Apr 4 17:38 README
-rwx------ 1 diradmin diradmin 158 May 18 13:35 user_create_post.sh
fixed root permissions
list files from: /usr/local/directadmin/scripts/custom
total 20
drwx------ 2 diradmin diradmin 76 May 18 12:59 .
drwx--x--x. 4 diradmin diradmin 4096 Apr 25 11:43 ..
-rwx------ 1 diradmin diradmin 161 May 18 13:35 domain_create_post.sh
-rwx------ 1 diradmin diradmin 6295 Apr 4 17:38 README
-rwx------ 1 diradmin diradmin 158 May 18 13:35 user_create_post.sh
Ready fixPermissions
------------------------------------
Ready scripts
------------------------------------
什么,我做错了什么??(我希望这不是一个愚蠢的错字)
我知道我也可以使用 find 和 grep 等,如其他答案中所述。但是为什么第一个脚本有效而第二个脚本无效?
在此先感谢,flexJoly
解决方案
这仅适用于 GNU sed:-
find "${dirDA}"\*.sh > stack
while [ $(wc -l stack | cut -d' ' -f1) -gt 0 ]
do
filename=$(sed -n '1p' stack)
sudo rm -v "${filename}" 2>&1 | showResult
sed -i '1d' stack
done
这里使用find来列出要删除的文件,将它们输出到堆栈文件中,将它们从堆栈中拉出,并用rm一个一个地删除它们。
每当我处理多个文件时,我发现设置这样的循环更容易,因为这样每个文件都会被单独处理,我不必担心 rm 或任何其他命令将如何解释掩码,或者它是否会绊倒他们。