递归列出目录中的所有文件,但排除目录本身

递归列出目录中的所有文件,但排除目录本身

简单的问题,我正在运行以下 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;结束如果.

相关内容