获取文件相对路径

获取文件相对路径

我有两个目录 A 和 B。每个目录包含一个 zip。

我怎样才能将这两个 zip 文件的路径写入文本文件?

目录系统示例:

FILES/ONE/one.zip
FILES/TWO/two.zip

我想从 FILES 目录运行命令

答案1

您可以按照以下方式使用该find命令,并将其输出定向到文件:

/tmp/FILES$ find . -name "*.zip" -print > outfile.txt

zip查找当前文件夹内的每个以 结尾的文件( FILES) 并打印其路径
该命令的输出find被定向到文本文件中:

其内容outfile.txt为:

/tmp/FILES$ cat outfile.txt 

./TWO/two.zip
./ONE/one.zip

find请注意,如果您在文件夹上方的一个文件夹中执行该命令FILES,则您的输出还将包括FILES该文件夹的一部分。

例如当 find 输出指向stdout

/tmp$ find FILES -name "*.zip" -print
FILES/TWO/two.zip
FILES/ONE/one.zip

答案2

简单的 shell 通配符可以实现这一点。例如,给定

$ tree .
.
├── ONE
│   └── one.zip
└── TWO
    └── two.zip

2 directories, 2 files

然后

$ printf '%s\n' */*.zip
ONE/one.zip
TWO/two.zip

通过附加到命令将输出重定向到文件> outfile。如果要添加./以使相对路径更明确,请更改%s./%s

$ printf './%s\n' */*.zip > outfile
$ cat outfile
./ONE/one.zip
./TWO/two.zip

如果你想这样做递归地,然后bash支持,如果你启用了globstarshell 选项,例如

$ cd ..
$ shopt -s globstar
$ printf '%s\n' **/*.zip
FILES/ONE/one.zip
FILES/TWO/two.zip

如果您在脚本中使用此功能,您可能nullglob也应该启用该选项,以正确处理不存在匹配文件的情况。

答案3

或者你可以用regex

find /tmp/FILES -regextype posix-egrep -regex ".*/*/*.zip" > outfile.txt

输出相同:

./TWO/two.zip
./ONE/one.zip

问题是它将匹配任何子文件夹中的所有 zip 文件。如果您可以定义包含文件的子文件夹,则可以执行以下操作:

find /tmp/FILES -regextype posix-egrep -regex ".*/(ONE|TWO)/*.zip" > outfile.txt

相关内容