我正在使用Debian Linux。我是新手。我会尽我所能以最简单的方式问。
我在驱动器上有一棵很深的目录树,其中包含成千上万个.tif文件和.txt文件。我想递归地查找(列出)所有没有具有匹配的.tif文件(基本名称)的.txt文件。 .tif文件和.txt文件也位于整个树的单独目录中。
它看起来很简单……
目录1:hf-770.tif,hf-771.tif,hf-772.tif
目录2:hf-770.txt,hf-771.txt,hf-771.txt,hr-001.txt,tb-789.txt
我需要找到(列出)hr-001.txt和tb-789.txt,因为它们没有匹配的.tif文件。同样,目录树很深,整个地方都有多个子目录。
我研究并尝试了以下命令的变体,但似乎无法使其起作用。非常感谢。
find -name "*.tif" -name "*.txt" | ls -1 | sed 's/\([^.]*\).*/\1/' | uniq
答案 0 :(得分:1)
您可以为此编写一个shell脚本:
#!/bin/bash
set -ue
while IFS= read -r -d '' txt
do
tif=$(basename "$txt" | sed s/\.txt$/.tif/)
found=$(find . -name "$tif")
if [ -z "$found" ]
then
echo "$txt has no tif"
fi
done < <(find . -name \*.txt -print0)
这会循环遍历它在当前目录或以下目录中找到的所有.txt
文件。对于找到的每个文件,它将扩展名.txt
替换为.tif
,然后尝试查找该文件。如果找不到(返回的文本为空),则会打印.txt
文件名。
robert@saaz:$ tree
.
├── bar
│ └── a.txt
├── foo
│ ├── a.tif
│ ├── b.tif
│ ├── c.tif
│ └── d.txt
└── txt-without-tif
2 directories, 6 files
robert@saaz:$ bash txt-without-tif
./foo/d.txt has no tif