gpt4 book ai didi

linux - bash 删除脚本不起作用

转载 作者:太空狗 更新时间:2023-10-29 12:24:45 26 4
gpt4 key购买 nike

我有一个 bash 脚本,可以处理所有不是 .avi、.mp4 和 .mkv 的文件。

这是我尝试过的:

#!/bin/bash
FILES=$(find /home/mattia/test/ -type f -name '*.*')

for f in $FILES
do
ext=${f#*.}
echo $ext
if [[ "$ext" != "mp4" || "$ext" != "mkv" || "$ext" != "avi" ]]; then
rm -f $f
echo deleted
fi
done

但是这个脚本会删除所有文件。

最佳答案

除了将 || 更改为 && 之外,脚本还很脆弱,例如,如果任何文件包含空格,它将不起作用。一般来说,将 find 的输出存储在循环变量中是不安全的,因此应避免这种做法。

无论如何,你不需要循环,find 可以自己完成这一切,而且更安全:

find /home/mattia/test/ -type f ! \( -name '*.mp4' -o -name '*.mkv' -o -name '*.avi' \) -print -delete

请注意,您可以使用更直观的 -not 而不是 !,但请记住,它不符合 POSIX。

关于linux - bash 删除脚本不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45254845/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com