Linux系统中获取路径的文件名的方法

Linux系统中获取路径的文件名的方法,第1张

这篇文章主要介绍了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 文件信息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9466275.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存