这篇文章主要介绍了Linux系统中获取路径的文件名的方法,文中总结出了两条,需要的朋友可以参考下
代码如下:
[root@dabuinfo
]#basename
/root/aaa/bbb/dabutxt
显示:
代码如下:
dabutxt
#获取路径的文件名
shell脚本中如何获得脚本文件所在路径
方法一:
代码如下:
[root@dabuinfo
]#DIR=$(cd
"$(dirname
"$0")";
pwd)
[root@dabuinfo
]#echo
$DIR
但是像这种dirname
"$0"这种写法,在遇到source命令时会得到错误的结果。
方法二:
代码如下:
[root@dabuinfo
]#echo
"$(
cd
"$(
dirname
"${BASH_SOURCE[0]}"
)"
&&
pwd
)"
上面一行命令可以获得脚本的绝对轮径,无论你在何处调用这个脚本。
但是如果含有软链接,就无法使用了。所以,我们为了能正确解析指向脚本的软链接,可以使用下面的多行命令:
代码如下:
SOURCE="${BASH_SOURCE[0]}"
while
[
-h
"$SOURCE"
];
do
#
resolve
$SOURCE
until
the
file
is
no
longer
a
symlink
DIR="$(
cd
-P
"$(
dirname
"$SOURCE"
)"
&&
pwd
)"
SOURCE="$(readlink
"$SOURCE")"
[[
$SOURCE
!=
/
]]
&&
SOURCE="$DIR/$SOURCE"
#
if
$SOURCE
was
a
relative
symlink,
we
need
to
resolve
it
relative
to
the
path
where
the
symlink
file
was
located
done
DIR="$(
cd
-P
"$(
dirname
"$SOURCE"
)"
&&
pwd
)"
也可与source,bash
-c命令使用
但是,如果你在脚本中使用先cd切换到其他目录,在运行时上面的命令片段时,则上面的命令不能等到正确的结果。可以参考关于$CDPATH
陷阱的文章。想理解它如何其作用的,可以运行下面的代码:
代码如下:
#!/bin/bash
SOURCE="${BASH_SOURCE[0]}"
while
[
-h
"$SOURCE"
];
do
#
resolve
$SOURCE
until
the
file
is
no
longer
a
symlink
TARGET="$(readlink
"$SOURCE")"
if
[[
$SOURCE
==
/
]];
then
echo
"SOURCE
'$SOURCE'
is
an
absolute
symlink
to
'$TARGET'"
SOURCE="$TARGET"
else
DIR="$(
dirname
"$SOURCE"
)"
echo
"SOURCE
'$SOURCE'
is
a
relative
symlink
to
'$TARGET'
(relative
to
'$DIR')"
SOURCE="$DIR/$TARGET"
#
if
$SOURCE
was
a
relative
symlink,
we
need
to
resolve
it
relative
to
the
path
where
the
symlink
file
was
located
fi
done
echo
"SOURCE
is
'$SOURCE'"
RDIR="$(
dirname
"$SOURCE"
)"
DIR="$(
cd
-P
"$(
dirname
"$SOURCE"
)"
&&
pwd
)"
if
[
"$DIR"
!=
"$RDIR"
];
then
echo
"DIR
'$RDIR'
resolves
to
'$DIR'"
fi
echo
"DIR
is
'$DIR'"
find / -name "m" -exec grep -l 'myCenter' {} \;
grep加入-l选项,就能将找到的文件名列出
linux中的find命令——查找文件名
1在某目录下查找名为“elmcc”的文件
find /home/lijiajia/ -name elmcc
2查找文件名中包含某字符(如"elm")的文件
find /home/lijiajia/ -name 'elm'
find /home/lijiajia/ -name 'elm'
find /home/lijiajia/ -name 'elm'
3根据文件的特征进行查询
find /home/lijiajia/ -amin -10 #查找在系统中最后10分钟访问的文件
find /home/lijiajia/ -atime -2 #查找在系统中最后48小时访问的文件
find /home/lijiajia/ -empty #查找在系统中为空的文件或者文件夹
find /home/lijiajia/ -group cat # 查找在系统中属于groupcat 的文件(试了,命令不对。)
find /home/lijiajia/ -mmin -5 # 查找在系统中最后5 分钟里修改过的文件
find /home/lijiajia/ -mtime -1 #查找在系统中最后24 小时里修改过的文件
find /home/lijiajia/ -nouser #查找在系统中属于作废用户的文件(不明白是什么意思)
find /home/lijiajia/ -amin 10 #查找在系统中最后10分钟访问的文件
find /home/ftp/pub -user lijiajia #查找在系统中属于lijiajia这个用户的文件
(PS:以上都是在 /home/lijiajia/文件夹下进行的 *** 作)
4使用混合查找方式查找文件
find /tmp -size +10000000c -and -mtime +2 #查找/tmp目录中大于10000000字节并且在48小时内修改的某个文件
find /tmp -user tom -or -user george #查找/tmp目录中属于tom或者george这两个用户的文件
find /tmp ! -usr fred #查找/tmp目录中不属于fred的文件
5查找并显示文件
find /home/lijiajia/ -name 'elmcc' -ls #在目录下查找名为“elmcc”的文件,并显示这些文件的信息
请注意,所有的程序在它们第一行都是#!/usr/bin/env/python,也就是说,我们想要Python的解释器来执行这些脚本。因此,如果你想你的脚本具有执行性,请使用chmod +x your-scriptpy, 那么你就可以使用/your-scriptpy来执行它了(在本文中你将会看到这种方式)
探索platform模块
platform模块在标准库中,它有很多运行我们获得众多系统信息的函数。让我们运行Python解释器来探索它们中的一些函数,那就从platformuname()函数开始吧:
>>> import platform
>>> platformuname()
('Linux', 'fedoraechorand', '374-204fc18x86_64', '#1 SMP Wed Jan 23 16:44:29 UTC 2013', 'x86_64')
如果你已知道linux上的uname命令,那么你就会认出来这个函数就是这个命令的一个接口。在Python 2上,它会返回一个包含系统类型(或者内核版本),主机名,版本,发布版本,机器的硬件以及处理器信息元组(tuple)。你可以使用下标访问个别属性,像这样:
>>> platformuname()[0]
'Linux'
在Python 3上,这个函数返回的是一个命名元组:
>>> platformuname()
uname_result(system='Linux', node='fedoraechorand',
release='374-204fc18x86_64', version='#1 SMP Wed Jan 23 16:44:29
UTC 2013', machine='x86_64', processor='x86_64')
因为返回结果是一个命名元组,这就可以简单地通过名字来指定特定的属性,而不是必须记住下标,像这样:
>>> platformuname()system
'Linux'
platform模块还有一些上面属性的直接接口,像这样:
>>> platformsystem()
'Linux'
>>> platformrelease()
'374-204fc18x86_64'
[root@localhost ~]# ls -l
总计 152
-rw-r--r-- 1 root root 2915 08-03 06:16 a
-rw------- 1 root root 1086 07-29 18:35 anaconda-kscfg
…………………………………………
第1行:总计(total)
Total后面的数字是指当前目录下所有文件所占用的空间总和。使用ls –lh可查看,也可使用ls –alh查看:
第1字段: 文件属性字段。
-rw-r--r-- 1 root root 762 07-29 18:19 exit
文件属性字段总共有10个字母组成;第一个字符表示文件类型。
-表示该文件是一个普通文件。
d表示该文件是一个目录,字母"d",是dirtectory(目录)的缩写。
注意:目录或者是特殊文件,这个特殊文件存放其他文件或目录的相关信息。
l表示该文件是一个链接文件。字母"l"是link(链接)的缩写,类似于windows下的快捷方式
b的表示块设备文件(block),一般置于/dev目录下,设备文件是普通文件和程序访问硬件设备的入口,是 很特殊的文件。没有文件大小,只有一个主设备号和一个辅设备号。一次传输数据为一整块的被称为块设备,如硬盘、光盘等。最小数据传输单位为一个数据块(通常一个数据块的大小为512字节)。
c表示该文件是一个字符设备文件(character),一般置于/dev目录下,一次传输一个字节的设备被称为字符设备,如键盘、字符终端等,传输数据的最小单位为一个字节。
p表示该文件为命令管道文件。与shell编程有关的文件。
s表示该文件为sock文件。与shell编程有关的文件。
链接文件分为硬链接或符号链接两种。
硬链接:多个指向同一文件。硬链接文件大小完全相同,如有多个硬链接,所链接的文件只是一个文件大小。
同一个文件所有的文件都是等价的, *** 作系统不区分链接创建的先后顺序,若一个文件存在两个链接,那么除去一个文件还可以通过另外一个文件来访问该文件,也可以除去创建链接时用到的文件,但只要还有一个链接存在,就可通过该连接访问文件。
符号链接(软链接):建立一个独立的文件,这个文件会让数据的读取指向它链接的文件内容。类似windows快捷方式。
第1字段后9个字母表示该文件或目录的权限位。
r表是读 (Read) 、w表示写 (Write) 、x表示执行 (eXecute)
前三个表示文件拥有者的权限,中间三个表示文件所属组拥有的权限,最后三个表示其他用户拥有的权限。
SUID和GUID解析:
s:4;g:2;o:1
4777即rwsrwxrwx。6777即rwsrwsrwx
第2字段:文件硬链接数
-rw-r--r-- 1 root root 762 07-29 18:19 exit
如果一个文件不是目录,此时这一字段表示这个文件所具有的硬链接数。
第2字段的值为1,说明文件exit只有exit这一个文件名。即只有一个指向该链接的硬链接。
如果使用ln,做一个指向该文件的硬链接再查看该文件,该文件的第2字段就会变成2。
java是跨平台语言,在linux上读文件跟在windows上读文件是一样的 只是文件路径不一样,可以用File对象和FileInputSteam来读取。但要注意文件编码问题。
如果有中文请做适当的编码转换,通常情况下Linux的默认字符编码为UTF-8编码方式,项目可以直接采用utf8编码方式 *** 作用SystemgetProperty("fileencoding")可检查系统编码格式。可改 *** 作系统的文件系统编码,vi /etc/profile,在文件末尾加上
export LANG="zh_CNGBK"
export LC_ALL="zh_CNGBK"
编码转换代码:new String(files[i]getName()getBytes("GBK"),"UTF-8");
文件 *** 作的核心代码请参考下面代码:
String path= "/home/";
path= "/home/multiverse/Repository/PMEPGImport";
File file=new File(path);
File[] tempList = filelistFiles();
for (int i = 0; i < tempListlength; i++) {
if (tempList[i]isFile()) {
//FileInputStream fis = new FileInputStream("fileName");
//InputStreamReader isr = new InputStreamReader(fis,"utf-8");
StringBuffer buffer = new StringBuffer();
String text;
BufferedReader input = new BufferedReader (new FileReader(tempList[i]));
while((text = inputreadLine()) != null)
bufferappend(text +"/n"); }
if (tempList[i]isDirectory()) {
Systemoutprintln("文件夹:"+tempList[i]);
}
}
以上就是关于Linux系统中获取路径的文件名的方法全部的内容,包括:Linux系统中获取路径的文件名的方法、linux find 怎样取得文件名呢、如何在 Linux 上使用 Python 读取 word 文件信息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)