如何在 Linux 中生成带有其绝对路径的文件列表?
- 2024-10-23 08:47:00
- admin 原创
- 71
问题描述:
我正在编写一个以文件路径作为输入的 shell 脚本。
因此,我需要生成具有完整路径的递归文件列表。例如,文件bar
具有以下路径:
/home/ken/foo/bar
但据我所知,ls
和find
都只提供相对路径列表:
./foo/bar (from the folder ken)
find
这似乎是一个显而易见的要求,但我在手册页中看不到任何内容ls
。
如何在 shell 中生成文件列表(包括它们的绝对路径)?
解决方案 1:
如果你给出find
绝对路径,它将打印绝对路径。例如,要查找当前目录中的所有 .htaccess 文件:
find "$(pwd)" -name .htaccess
或者如果你的 shell 扩展$PWD
到当前目录:
find "$PWD" -name .htaccess
find
只是将给定的路径添加到该路径的文件的相对路径中。
pwd -P
如果您想解析当前目录中的符号链接,Greg Hewgill还建议使用。
解决方案 2:
readlink -f filename
给出完整的绝对路径。但如果文件是符号链接,您将获得最终解析的名称。
解决方案 3:
将其用于目录(bash 中需要/
后面的部分来将其限制为目录):**
ls -d -1 "$PWD/"**/
对于当前目录下的文件和目录,其名称包含.
:
ls -d -1 "$PWD/"*.*
一切都如此:
ls -d -1 "$PWD/"**/*
摘自此处
http://www.zsh.org/mla/users/2002/msg00033.html
在 bash 中,**
如果启用,则是递归的shopt -s globstar
。
解决方案 4:
您可以使用
find $PWD
在 bash 中
解决方案 5:
ls -d "$PWD/"*
这只查找当前目录。如果包含空格,则用引号括住“$PWD”。
解决方案 6:
你可以做
ls -1 | xargs realpath
如果需要指定绝对路径或相对路径,也可以这样做
ls -1 $FILEPATH | xargs realpath
解决方案 7:
命令: ls -1 -d "$PWD/"*
这将提供如下所示的文件的绝对路径。
[root@kubenode1 ssl]# ls -1 -d "$PWD/"*
/etc/kubernetes/folder/file-test-config.txt
/etc/kubernetes/folder/file-test.txt
/etc/kubernetes/folder/file-client.txt
解决方案 8:
尝试一下:
find "$PWD"/
您将获得工作目录中的绝对路径列表。
解决方案 9:
Matthew 的上述选择$PWD
很不错。如果您希望 find 仅打印文件,那么您还可以添加 -type f 选项以仅搜索普通文件。其他选项包括“d”(仅用于目录)等。因此,对于您的情况,情况如下(如果我只想搜索带有 .c 扩展名的文件):
find $PWD -type f -name "*.c"
或者如果你想要所有文件:
find $PWD -type f
注意:您不能为上述命令创建别名,因为当 bash 设置别名时,$PWD 会自动完成到您的主目录。
解决方案 10:
如果你给 find 命令指定了绝对路径,它会以绝对路径输出结果。因此,如果你在 Ken 目录中输入:
find /home/ken/foo/ -name bar -print
(而不是相对路径find . -name bar -print
)
你应该得到:
/home/ken/foo/bar
因此,如果您想要一个ls -l
并让其返回绝对路径,您只需告诉 find 命令ls -l
对其找到的任何内容执行一个。
find /home/ken/foo -name bar -exec ls -l {} ;
{}
注意:和之间有一个空格;
你会得到类似这样的结果:
-rw-r--r-- 1 ken admin 181 Jan 27 15:49 /home/ken/foo/bar
如果您不确定文件在哪里,您可以随时更改搜索位置。只要搜索路径以“/”开头,您就会得到一个绝对路径。如果您正在搜索一个位置(如/),您将会得到很多权限被拒绝的错误,那么我建议重定向标准错误,这样您就可以真正看到查找结果:
find / -name bar -exec ls -l {} ; 2> /dev/null
(2>
是 Borne 和 Bash shell 的语法,但不适用于 C shell。它也可能适用于其他 shell,但我只确定它在 Bourne 和 Bash 中有效)。
解决方案 11:
只是一种替代方案
ls -d "$PWD/"*
为了确定这*
是壳层扩展,因此
echo "$PWD/"*
会做同样的事情(缺点是您不能用-1
新行而不是空格来分隔)。
解决方案 12:
如果你需要当前目录和子目录中所有文件的列表
find $PWD -type f
如果您只需要当前目录中所有文件的列表
find $PWD -maxdepth 1 -type f
解决方案 13:
fd
使用fd
(替代find
),使用以下语法:
fd . foo -a
.
搜索模式在哪里,foo
根目录在哪里。
例如,要递归列出所有文件etc
,请运行:fd . /etc -a
。
-a
,--absolute-path
显示绝对路径而不是相对路径
解决方案 14:
递归查找 jar 文件并打印绝对路径
ls -R |grep ".jar$" | xargs readlink -f
/opt/tool/dev/maven_repo/com/oracle/ojdbc/ojdbc8-19.3.0.0.jar
/opt/tool/dev/maven_repo/com/oracle/ojdbc/ons-19.3.0.0.jar
/opt/tool/dev/maven_repo/com/oracle/ojdbc/oraclepki-19.3.0.0.jar
/opt/tool/dev/maven_repo/com/oracle/ojdbc/osdt_cert-19.3.0.0.jar
/opt/tool/dev/maven_repo/com/oracle/ojdbc/osdt_core-19.3.0.0.jar
/opt/tool/dev/maven_repo/com/oracle/ojdbc/simplefan-19.3.0.0.jar
/opt/tool/dev/maven_repo/com/oracle/ojdbc/ucp-19.3.0.0.jar
解决方案 15:
您可能想尝试一下。
for name in /home/ken/foo/bar/*
do
echo $name
done
您可以使用for
循环并且echo
简单地无需来获取绝对路径find
。
解决方案 16:
如果您想要一个在函数中运行良好的动态解决方案,则此方法最有效
lfp ()
{
ls -1 $1 | xargs -I{} echo $(realpath $1)/{}
}
解决方案 17:
lspwd() { for i in $@; do ls -d -1 $PWD/$i; done }
解决方案 18:
下面是一个打印出不带额外句点的列表的示例,还演示了如何搜索文件匹配项。希望这对您有所帮助:
find . -type f -name "extr*" -exec echo `pwd`/{} ; | sed "s|./||"
解决方案 19:
这对我有用。但它没有按字母顺序列出。
find "$(pwd)" -maxdepth 1
此命令按字母顺序列出并列出隐藏文件。
ls -d -1 "$PWD/".*; ls -d -1 "$PWD/"*;
解决方案 20:
stat
单个文件的绝对路径:
stat -c %n "$PWD"/foo/bar
解决方案 21:
这将提供规范路径(将解析符号链接):realpath FILENAME
如果您想要符号链接本身的规范路径,那么:realpath -s FILENAME
解决方案 22:
大多数(如果不是全部)建议的方法都会导致路径无法直接用于其他终端命令(如果路径包含空格)。理想情况下,结果将在前面加上斜杠。这在 macOS 上对我有用:
find / -iname "*SEARCH TERM spaces are okay*" -print 2>&1 | grep -v denied |grep -v permitted |sed -E 's/ /\\ /g'
解决方案 23:
for p in <either relative of absolute path of the directory>/*; do
echo $(realpath -s $p)
done
解决方案 24:
这是一个更短、更方便的解决方案:
find ~+
~+
意思是"$PWD"
,但它是自动引用的,不需要在键盘上输入符号添加
-name .htaccess
或-maxdepth 1
如有必要
与其他答案不同,您可以为此命令创建别名:
alias fa='find ~+'
输入这个
~/.bashrc
,你只需要输入 2 个字母或者,您可以在别名末尾添加
-name
并像fa .htaccess
单引号防止过早扩展
fa 表示查找绝对路径
解决方案 25:
在 Linux 中,递归文件可以通过多种方式列出。这里我分享一个脚本来清除/var/log/
目录中的所有文件日志(仅限文件),并再次检查最近哪个日志文件已进入。
第一的:
find /var/log/ -type f #listing file recursively
第二:
for i in $(find $PWD -type f) ; do cat /dev/null > "$i" ; done #empty files recursively
第三次使用:
ls -ltr $(find /var/log/ -type f ) # listing file used in recent
注意:对于目录位置,您也可以传递$PWD
而不是/var/log
。
解决方案 26:
如果你没有符号链接,你可以尝试
tree -iFL 1 [DIR]
-i
使树形打印文件名在每一行中不带树结构。
-f
使树打印每个文件的完整路径。
-L 1
避免树的递归。
解决方案 27:
编写一个小函数
lsf() {
ls `pwd`/$1
}
然后你可以使用
lsf test.sh
它给出了完整的路径
/home/testuser/Downloads/test.sh
解决方案 28:
我使用以下命令在 txt 文件中列出目录中文件的绝对路径:
find "$PWD" -wholename '*.JPG' >test.txt
解决方案 29:
以下是带有完整路径的“ls -l”查找版本:
find "$PWD" -printf "%M %s %u %g %l %p
" -maxdepth 10 2>/dev/null
输出:
-rw------- 6239 u0_a106 u0_a106 /mnt/androidwritable/0/emulated/0/oenv.sh
-rw------- 5 u0_a106 u0_a106 /mnt/androidwritable/0/emulated/0/step3.txt
-rw------- 23716 u0_a106 u0_a106 /mnt/androidwritable/0/emulated/0/c0c7e91c6f39f547289c50eed7468f85.bin.tmp
-rw------- 524 u0_a106 u0_a106 /mnt/androidwritable/0/emulated/0/e578ae66bb10a13eff3e6734bd3e9962.sh.tmp
-rw------- 528 u0_a106 u0_a106 /mnt/androidwritable/0/emulated/0/e3528f9d0038eb9bb9f923989b8e70b9.sh.tmp
-rw------- 524 u0_a106 u0_a106 /mnt/androidwritable/0/emulated/0/ea24981a4e0df3ab52b2dcb247d010d1.sh.tmp
-rw------- 28812 u0_a106 u0_a106 /mnt/androidwritable/0/emulated/0/edfc87310f01af229bd4d1734fe0fbab.bin.tmp
-rw------- 528 u0_a106 u0_a106 /mnt/androidwritable/0/emulated/0/19646e6b5c9d1afd369c8e5620c85a86.sh.tmp
-rw------- 528 u0_a106 u0_a106 /mnt/androidwritable/0/emulated/0/e9ac90448e68032aae050a489c214071.sh.tmp
-rw------- 395 u0_a106 u0_a106 /mnt/androidwritable/0/emulated/0/469b78eaa19f3c69a0e55077f88bf817.sh
解决方案 30:
ls -1 | awk -vpath=$PWD/ '{print path$1}'
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件