漂亮的递归目录和文件打印
Pretty recursive directory and file print
我正在构建一个 JAVA 应用程序,它将 bash 命令的输出保存到列表中。
@root ~/a $ zipinfo -1 data.zip
a.txt
b.txt
test/
test/c.txt
root@ ~/a $ find .
.
./test
./test/c.txt
./b.txt
./data.zip
./a.txt
我们的想法是将 zip 中的文件和目录与磁盘上的内容进行比较,并从磁盘中删除任何差异。在这个例子中 test/c.txt
应该只被删除。
如您所见,格式不同。我需要哪个命令具有与 zipinfo -1
相同的样式?
我试过如下命令:
ls -R
ls -LR | grep ""
find . -exec ls -dl \{\} \; | awk '{print }'
删除 .
前缀的一种方法是使用 sed
。例如:
find . ! -name . | sed -e 's|^\./||'
! -name .
从列表中删除 .
条目。 sed
部分从每行的开头删除 ./
。
它应该为您提供与 zipinfo
几乎相同的格式,尽管顺序可能不同。
注意:以上建议与 Linux 和其他 unix 版本(例如 MacOS X)兼容。在 Linux 上,您可以通过以下方式获得相同的结果:
find . ! -name . -printf "%P\n"
-printf
谓词特定于 Linux findutils,%P
格式打印每个找到的文件,从开头删除搜索目录。
最简单的方法可能是向 zip
本身索要列表。它的 -sf
选项意味着显示它 将 添加的文件,而无需实际创建 zip 文件。所以:
$ zip add fake.zip -r -sf *
zip warning: name not matched: fake.zip
Would Add/Update:
a.txt
b.txt
test/
test/c.txt
Total 4 entries (0 bytes)
您 Java 代码将不得不跳过它也输出的无关 header/footer 行,但文件列表本身的格式与您从其他执行中获得的格式相同共 zip
.
我正在构建一个 JAVA 应用程序,它将 bash 命令的输出保存到列表中。
@root ~/a $ zipinfo -1 data.zip
a.txt
b.txt
test/
test/c.txt
root@ ~/a $ find .
.
./test
./test/c.txt
./b.txt
./data.zip
./a.txt
我们的想法是将 zip 中的文件和目录与磁盘上的内容进行比较,并从磁盘中删除任何差异。在这个例子中 test/c.txt
应该只被删除。
如您所见,格式不同。我需要哪个命令具有与 zipinfo -1
相同的样式?
我试过如下命令:
ls -R
ls -LR | grep ""
find . -exec ls -dl \{\} \; | awk '{print }'
删除 .
前缀的一种方法是使用 sed
。例如:
find . ! -name . | sed -e 's|^\./||'
! -name .
从列表中删除 .
条目。 sed
部分从每行的开头删除 ./
。
它应该为您提供与 zipinfo
几乎相同的格式,尽管顺序可能不同。
注意:以上建议与 Linux 和其他 unix 版本(例如 MacOS X)兼容。在 Linux 上,您可以通过以下方式获得相同的结果:
find . ! -name . -printf "%P\n"
-printf
谓词特定于 Linux findutils,%P
格式打印每个找到的文件,从开头删除搜索目录。
最简单的方法可能是向 zip
本身索要列表。它的 -sf
选项意味着显示它 将 添加的文件,而无需实际创建 zip 文件。所以:
$ zip add fake.zip -r -sf *
zip warning: name not matched: fake.zip
Would Add/Update:
a.txt
b.txt
test/
test/c.txt
Total 4 entries (0 bytes)
您 Java 代码将不得不跳过它也输出的无关 header/footer 行,但文件列表本身的格式与您从其他执行中获得的格式相同共 zip
.