我有两个文件夹,一个包含 txt 文件,另一个包含同名的 .jpg 文件。但是,txt 文件比 jpg 文件多得多。
folder_1/00.txt
folder_1/01.txt
folder_1/02.txt
folder_1/03.txt
folder_1/04.txt
folder_2/00.jpg
folder_2/01.jpg
folder_2/02.jpg
在这里,我需要删除03.txt
和,04.txt
因为这些名称没有出现在folder_2中
答案1
以下是一种方法:
$ for file in folder_1/*.jpg; do
fileName="${file##*/}"
[[ -e folder_2/${fileName/.txt/.jpg} ]] || echo rm -- "$file"
done
rm -- folder_1/03.txt
rm -- folder_1/04.txt
循环遍历 中名称以 结尾的for
所有非隐藏文件和目录,将每个文件和目录保存为。接下来,将变量设置为 的值,直到最后一个被删除,这意味着它将是文件名,不包括目录。最后,使用,我们检查 中是否有一个同名但有扩展名的文件,如果没有,则为。如果这符合您的要求,请删除并再次运行以实际删除文件:folder_1
.jpg
$file
fileName="${file##*/}"
$fileName
$file
/
[[ -e folder_2/${fileName/.txt/.jpg} ]] || echo rm -- $file
folder_2
.txt
echo rm -- "$file"
echo
for file in folder_1/*.jpg; do
fileName="${file##*/}"
[[ -e folder_2/${fileName/.txt/.jpg} ]] || rm -- "$file"
done
这里in不是必需的,但养成这个习惯是个好习惯:它确保之后的任何内容--
都不会被解析为 的选项,因此允许命令也对以 开头的文件名起作用。rm -- "$file"
--
rm
-