shell 为什么在意外标记'('附近出现语法错误

7qhs6swi  于 2023-02-24  发布在  Shell
关注(0)|答案(3)|浏览(204)

我尝试使用shell脚本实现Linux命令,从忽略“output.mp4”和“_Removed.avi”的目录中删除一些文件和目录,但出现以下错误:

./test.sh: line 11: syntax error near unexpected token `('
./test.sh: line 11: `sudo rm -rf !("output.mp4"|"_Removed.avi")'

我正在实现的脚本是:

#!/bin/bash

if [ -d /home/Videos_bkp/ ]
then

cd /home/subham/Videos_bkp

sudo rm -rf !("output.mp4"|"_Removed.avi")

else

echo "Directory Not Available"

fi

提前感谢

wfveoks0

wfveoks01#

你可以试试这种类型的脚本。我创建这个脚本是为了删除文件和文件夹,排除一些文件夹,这就是为什么我使用[-maxdepth 1]后跟文件夹名称,但你也可以使用文件名。

#!/bin/bash

if [[ -d  /home/Videos_bkp/ ]];
then

cd /home/subham/Videos_bkp

find . -maxdepth 1  ! -name "output.mp4" ! -name "_Removed.avi" ! -name . -exec rm -r {} \;

else

echo "Directory Not Available"

fi```
jqjz2hbq

jqjz2hbq2#

subshell需要打开extglob,在文件头中添加以下内容。

shopt -s extglob
...
wwodge7n

wwodge7n3#

文件名应类似于*.bash,并在终端中运行bash *.bash

#!/bin/bash
shopt -s extglob
cd /home/subham/Videos_bkp
sudo rm -v !("output.mp4"|"_Removed.avi")

相关问题