简单的问题,我正在运行以下 find 命令:
find . -type d \( -path ./.git -o \
-path ./log -o \
-path ./public -o \
-path ./tmp \) \
-prune -o \
-print
列出我的目录中的所有文件,不包括指定目录。
这很好用,但是,我还想做的是从输出中排除任何实际目录,因此如果有如下目录结构:
test
-- foo.text
-- bar.text
当我运行命令时我想看到:
./test/foo.text
./test/bar.text
代替:
.
./test
./test/foo.text
./test/bar.text
有人可以帮忙吗?
答案1
find . -type f
会做的。如果你想对文件名进行操作,你可以执行 exec 。
答案2
只需使用! -type d
:
find . -type d \( -path ./.git -o \
-path ./log -o \
-path ./public -o \
-path ./tmp \) -prune -o \
! -type d -print
答案3
这是一种方法。我将您的输出从find
(使用xargs
)传输到一点 bash,它会询问“这不是一个目录吗?”如果不是,它会将其回显到您的终端。
这是整个她的爆炸:
find . -type d \( -path ./.git -o -path ./log -o -path ./public -o -path ./tmp \) -prune -o -print | xargs -i bash -c 'if [ ! -d "{}" ]; then echo "{}"; fi'
这只是我的补充:
xargs -i bash -c 'if [ ! -d "{}" ]; then echo "{}"; fi'
解释:
xargs -i
将字符串“{}”替换为参数(通过管道传入的参数)
bash -c
从字符串中读取命令
if [ ! -d "{}"];
这是一个目录吗?
echo "{}"
回显查找结果。
fi;
结束如果.