使用find,如何像ls -F那样分类? (带有尾部斜杠的目录)

使用find,如何像ls -F那样分类? (带有尾部斜杠的目录)

我用来find获取文件列表,然后用 grep 进行路径匹配:

$ find pc* | grep -i arthur
pc6/arthurv/untitled-2.py
pc6/arthurv/untitled-3.py
pc6/arthur.py
pc9/Arthur 4C
pc9/Arthur 4C/untitled-1.py
pc9/Arthur 4C/untitled-2.py

我想这样做并为每个目录ls -F附加一个。/

或者,如何 find 显示所有匹配不区分大小写的目录arthur

答案1

可以在find表达式中使用析取来实现条件处理;与 GNU find

find pc* -type d -printf "%p/\n" -o -print

将找到以匹配“pc*”的文件和目录开头的路径中的所有内容,并打印它们的名称,如果它们是目录,则后跟“/”。

其工作方式如下:

  • pc*指定起始路径;
  • -type d匹配目录;
  • -printf "%p/\n"打印当前处理文件的路径,后跟“/”和换行符;因为它遵循-type d,所以只有在匹配时才会执行-type d(有一个隐式连词);
  • -o引入析取:如果前面的表达式不匹配,则将计算其后面的表达式(并且它前面的表达式在-type d -printf "%p/\n"这里,因为连词的优先级高于析取);
  • -print打印当前处理的文件的路径。

可以使用其他find表达式来显示与不区分大小写的“arthur”匹配的所有目录:

find . -type d -iname "*arthur*"

答案2

find有大量的选项和细节。另一种变体是-printf与使用%y

$ find . -printf "%p:%y\n"
./dir:d
./file:f

其中%y添加“d”或“f”就像ls -l

$ find . -printf "%p%y\n" | sed 's!d$!/! ; s!f$!!' 

答案3

只需添加到此处的答案即可列出所有文件和目录:

cat <(find old.files -type d -printf "%p/\n") <(find old.files -type f)

输出:

dir1/dir2/
dir1/test.txt
dir1/dir2/test2.txt

以前的问题dir1/dir2没有尾部斜杠:

dir1/dir2
dir1/test.txt
dir1/dir2/test2.txt

最终是为了能够比较 tar 文件和目录。

diff <(tar tf old.files.tar | sort -u) <(cat <(find old.files -type d -printf "%p/\n") <(find old.files -type f) | sort -u)

相关内容