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")
谢谢赛勒斯!
命令
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")
谢谢赛勒斯!