Bash - 将变量中的文件名传递给 rm,但带有 !选项

Bash - to pass to rm a filename which is in a variable, but with ! option

命令

rm  !("$filename")

不起作用,因为它在语法上不正确。

我想删除目录中的其他文件,但 $filename 变量中指定的文件除外。

实际上,bash脚本是这样的:

#!/bin/bash

filename="$(ls -t | grep radar_ | head -n 1)"
echo "${filename}"
rm  !("$filename")

我该怎么做?

您可以尝试类似的方法:

DIR="/path_to_your_dir"
for file in "${DIR}"/*; do 
  [[ $file = "${filename}" ]] || rm "${file}"
done

或类似的东西:

DIR="/path_to_your_dir"
ls -1 "${DIR}"|grep -v "${filename}"|xargs -I{} rm {}

或类似的东西:

 find "${DIR}" ! -name "${filename}" -exec rm {} \;
 find "${DIR}" ! -name "${filename}" -a -type f -exec rm {} \; # apply the rm only on files (not on the directories for example)

我个人会选择 find 解决方案来执行此类任务(搜索和对某些文件进行操作)。

shopt -s extglob 帮助。

所以 bash 脚本现在是:

#!/bin/bash

#set -x

shopt -s extglob

filename="$(ls -t | grep radar_ | head -n 1)"
echo "${filename}"
rm  !("$filename")

谢谢赛勒斯!