我有 2 个文件夹,一个包含图像文件,第二个包含文本文件,每个文本文件与图像文件同名,并包含有关图像的信息。例如:
-Labels:
-1.txt
-2.txt
-3.txt
-6.txt
-Images:
-1.jpg
-2.jpg
-3.jpg
-4.jpg
-5.jpg
-6.jpg
Run Code Online (Sandbox Code Playgroud)
我想删除没有文本文件的图像(在这个例子中:4.jpg,5.jpg),我找到了一种如何确定不同文件的方法,但我无法删除它们。
diff <(ls -1 ./Images | sed s/.jpg//g) <( ls -1 ./Labels | sed s/.txt//g)
Run Code Online (Sandbox Code Playgroud)
这是一个可以帮助您解决此任务的小型 bash 脚本:
#!/bin/bash
for file in Images/*.jpg
do
if [[ ! -f "Labels/$(basename ${file%.*}).txt" ]]
then
echo rm "$file"
fi
done
Run Code Online (Sandbox Code Playgroud)
echo以进行实际更改。脚本必须在父目录中执行,这里它被格式化为内联命令:
for f in Images/*.jpg; do if [[ ! -f "Labels/$(basename ${f%.*}).txt" ]]; then echo rm "$f"; fi; done
Run Code Online (Sandbox Code Playgroud)
我想我会这样做:
for i in Images/*; do file=`echo $i | sed -e 's/jpg/txt/' -e 's/Images/Labels/'`; if [ ! -f "$file" ] ; then rm $i ; fi; done
Run Code Online (Sandbox Code Playgroud)
如果你想确保它有效,在实际使用它之前先试试这个:
for i in Images/*; do file=`echo $i | sed -e 's/jpg/txt/' -e 's/Images/Labels/'`; if [ ! -f "$file" ] ; then echo rm $i ; fi; done
Run Code Online (Sandbox Code Playgroud)
它将显示将执行哪些命令。
| 归档时间: |
|
| 查看次数: |
1082 次 |
| 最近记录: |