Linux如何查找大文件或目录总结及在全部目录中查找

 在Windows系统中,我们可以使用TreeSize工具查找一些大文件或文件夹,非常的方便高效,在Linux系统中,如何去搜索一些比较大的文件呢?下面我整理了一下在Linux系统中如何查找大文件或文件夹的方法。

 

1: 如何查找大文件?

其实很多时候,你需要了解当前系统下有哪些大文件,比如文件大小超过100M或1G(阀值视具体情况而定)。那么如何把这些大文件搜索出来呢?例如我要搜索当前目录下,超过800M大小的文件

[root@getlnx01 u03]# pwd
/u03
[root@getlnx01 u03]# find . -type f -size +800M
./flash_recovery_area/backup/backupsets/ora_df873519197_s46815_s1
./flash_recovery_area/backup/backupsets/ora_df873523646_s46822_s1
./flash_recovery_area/backup/backupsets/ora_df873521714_s46818_s1
./flash_recovery_area/backup/backupsets/ora_df873522876_s46820_s1
./flash_recovery_area/backup/backupsets/ora_df873517396_s46813_s1
./flash_recovery_area/backup/backupsets/ora_df873523321_s46821_s1
./flash_recovery_area/backup/backupsets/ora_df873515765_s46811_s1
./flash_recovery_area/backup/backupsets/ora_df873520789_s46817_s1
./flash_recovery_area/backup/backupsets/ora_df873524162_s46823_s1
./flash_recovery_area/backup/backupsets/ora_df873518302_s46814_s1
./flash_recovery_area/backup/backupsets/ora_df873519953_s46816_s1
./flash_recovery_area/backup/backupsets/ora_df873516500_s46812_s1
./flash_recovery_area/backup/backupsets/ora_df873513413_s46809_s1
./flash_recovery_area/backup/backupsets/ora_df873514789_s46810_s1
./oradata/epps/invsubmat_d08.dbf
./oradata/epps/gmtinv_d08.dbf
./oradata/epps/gmtinv_x01.dbf
./oradata/epps/undotbs02.dbf
./oradata/epps/gmtinv_d07.dbf
./oradata/epps/undotbs01.dbf
./oradata/epps/gmtinv_x02.dbf

clip_image001

 

如上命令所示,我们仅仅能看到超过800M大小的文件的文件名称,但是对文件的信息(例如,文件大小、文件属性)一无所知,那么能否更详细显示一些文件属性或信息呢,当然可以,如下所示

[root@getlnx01 u03]# find . -type f -size +800M  -print0 | xargs -0 ls -l
-rw-r----- 1 oracle oinstall 2782846976 Mar  6 11:51 ./flash_recovery_area/backup/backupsets/ora_df873513413_s46809_s1
-rw-r----- 1 oracle oinstall 1878433792 Mar  6 11:53 ./flash_recovery_area/backup/backupsets/ora_df873514789_s46810_s1
-rw-r----- 1 oracle oinstall 1378492416 Mar  6 11:54 ./flash_recovery_area/backup/backupsets/ora_df873515765_s46811_s1
-rw-r----- 1 oracle oinstall 1641381888 Mar  6 11:56 ./flash_recovery_area/backup/backupsets/ora_df873516500_s46812_s1
-rw-r----- 1 oracle oinstall 1564065792 Mar  6 11:58 ./flash_recovery_area/backup/backupsets/ora_df873517396_s46813_s1
-rw-r----- 1 oracle oinstall 1663492096 Mar  6 12:00 ./flash_recovery_area/backup/backupsets/ora_df873518302_s46814_s1
-rw-r----- 1 oracle oinstall 1368244224 Mar  6 12:02 ./flash_recovery_area/backup/backupsets/ora_df873519197_s46815_s1
-rw-r----- 1 oracle oinstall 1629069312 Mar  6 12:04 ./flash_recovery_area/backup/backupsets/ora_df873519953_s46816_s1
-rw-r----- 1 oracle oinstall 1629954048 Mar  6 12:06 ./flash_recovery_area/backup/backupsets/ora_df873520789_s46817_s1
-rw-r----- 1 oracle oinstall 1202192384 Mar  6 12:07 ./flash_recovery_area/backup/backupsets/ora_df873521714_s46818_s1
-rw-r----- 1 oracle oinstall 1189388288 Mar  6 12:10 ./flash_recovery_area/backup/backupsets/ora_df873522876_s46820_s1
-rw-r----- 1 oracle oinstall 1089257472 Mar  6 12:11 ./flash_recovery_area/backup/backupsets/ora_df873523321_s46821_s1
-rw-r----- 1 oracle oinstall 1097687040 Mar  6 12:12 ./flash_recovery_area/backup/backupsets/ora_df873523646_s46822_s1
-rw-r----- 1 oracle oinstall 1051009024 Mar  6 12:13 ./flash_recovery_area/backup/backupsets/ora_df873524162_s46823_s1
-rw-r----- 1 oracle oinstall 4294975488 Apr  3 15:07 ./oradata/epps/gmtinv_d07.dbf
-rw-r----- 1 oracle oinstall 4194312192 Apr  1 22:36 ./oradata/epps/gmtinv_d08.dbf
-rw-r----- 1 oracle oinstall 4294975488 Apr  3 15:54 ./oradata/epps/gmtinv_x01.dbf
-rw-r----- 1 oracle oinstall 4294975488 Apr  3 15:57 ./oradata/epps/gmtinv_x02.dbf
-rw-r----- 1 oracle oinstall 4294975488 Apr  1 22:35 ./oradata/epps/invsubmat_d08.dbf
-rw-r----- 1 oracle oinstall 8589942784 Apr  4 09:55 ./oradata/epps/undotbs01.dbf
-rw-r----- 1 oracle oinstall 8589942784 Apr  4 09:15 ./oradata/epps/undotbs02.dbf

clip_image002

当我们只需要查找超过800M大小文件,并显示查找出来文件的具体大小,可以使用下面命令

[root@getlnx01 u03]# find . -type f -size +800M  -print0 | xargs -0 du -h
1.3G    ./flash_recovery_area/backup/backupsets/ora_df873519197_s46815_s1
1.1G    ./flash_recovery_area/backup/backupsets/ora_df873523646_s46822_s1
1.2G    ./flash_recovery_area/backup/backupsets/ora_df873521714_s46818_s1
1.2G    ./flash_recovery_area/backup/backupsets/ora_df873522876_s46820_s1
1.5G    ./flash_recovery_area/backup/backupsets/ora_df873517396_s46813_s1
1.1G    ./flash_recovery_area/backup/backupsets/ora_df873523321_s46821_s1
1.3G    ./flash_recovery_area/backup/backupsets/ora_df873515765_s46811_s1
1.6G    ./flash_recovery_area/backup/backupsets/ora_df873520789_s46817_s1
1004M   ./flash_recovery_area/backup/backupsets/ora_df873524162_s46823_s1
1.6G    ./flash_recovery_area/backup/backupsets/ora_df873518302_s46814_s1
1.6G    ./flash_recovery_area/backup/backupsets/ora_df873519953_s46816_s1
1.6G    ./flash_recovery_area/backup/backupsets/ora_df873516500_s46812_s1
2.6G    ./flash_recovery_area/backup/backupsets/ora_df873513413_s46809_s1
1.8G    ./flash_recovery_area/backup/backupsets/ora_df873514789_s46810_s1
4.1G    ./oradata/epps/invsubmat_d08.dbf
4.0G    ./oradata/epps/gmtinv_d08.dbf
4.1G    ./oradata/epps/gmtinv_x01.dbf
8.1G    ./oradata/epps/undotbs02.dbf
4.1G    ./oradata/epps/gmtinv_d07.dbf
8.1G    ./oradata/epps/undotbs01.dbf
4.1G    ./oradata/epps/gmtinv_x02.dbf

clip_image003

 

如果你还需要对查找结果按照文件大小做一个排序,那么可以使用下面命令

[root@getlnx01 u03]# find . -type f -size +800M  -print0 | xargs -0 du -h | sort -nr
1004M   ./flash_recovery_area/backup/backupsets/ora_df873524162_s46823_s1
8.1G    ./oradata/epps/undotbs02.dbf
8.1G    ./oradata/epps/undotbs01.dbf
4.1G    ./oradata/epps/invsubmat_d08.dbf
4.1G    ./oradata/epps/gmtinv_x02.dbf
4.1G    ./oradata/epps/gmtinv_x01.dbf
4.1G    ./oradata/epps/gmtinv_d07.dbf
4.0G    ./oradata/epps/gmtinv_d08.dbf
2.6G    ./flash_recovery_area/backup/backupsets/ora_df873513413_s46809_s1
1.8G    ./flash_recovery_area/backup/backupsets/ora_df873514789_s46810_s1
1.6G    ./flash_recovery_area/backup/backupsets/ora_df873520789_s46817_s1
1.6G    ./flash_recovery_area/backup/backupsets/ora_df873519953_s46816_s1
1.6G    ./flash_recovery_area/backup/backupsets/ora_df873518302_s46814_s1
1.6G    ./flash_recovery_area/backup/backupsets/ora_df873516500_s46812_s1
1.5G    ./flash_recovery_area/backup/backupsets/ora_df873517396_s46813_s1
1.3G    ./flash_recovery_area/backup/backupsets/ora_df873519197_s46815_s1
1.3G    ./flash_recovery_area/backup/backupsets/ora_df873515765_s46811_s1
1.2G    ./flash_recovery_area/backup/backupsets/ora_df873522876_s46820_s1
1.2G    ./flash_recovery_area/backup/backupsets/ora_df873521714_s46818_s1
1.1G    ./flash_recovery_area/backup/backupsets/ora_df873523646_s46822_s1
1.1G    ./flash_recovery_area/backup/backupsets/ora_df873523321_s46821_s1

clip_image004

不过如上截图所示,有时候排列的顺序并不完全是按大小一致,这个是因为du命令的参数h所致,你可以统一使用使用MB来显示,这样就能解决这个问题。到这里,这个在Linux系统查找大文件的命令已经非常完美了,当然如果你还有很多的需求,那么可以在这个命令上做修改、调整.

clip_image005

 

2: 如何查找Linux下的大目录

譬如有时候磁盘空间告警了,而你平时又疏于管理、监控文件的增长,那么我需要快速的了解哪些目录变得比较大,那么此时我们可以借助du命令来帮我们解决这个问题。

[root@getlnx01 u03]# du -h --max-depth=1
16K     ./lost+found
33G     ./flash_recovery_area
37G     ./oradata
70G     .

如果你想知道flash_recovery_area目录下面有哪些大文件夹,那么可以将参数max-depth=2 ,如果你想对搜索出来的结果进行排序,那么可以借助于sort命令。如下所示

[root@getlnx01 u03]# du -h --max-depth=2 | sort -n
3.5G    ./flash_recovery_area/EPPS
16K     ./lost+found
29G     ./flash_recovery_area/backup
33G     ./flash_recovery_area
37G     ./oradata
37G     ./oradata/epps
70G     .
[root@getlnx01 u03]# du -hm --max-depth=2 | sort -n
1       ./lost+found
3527    ./flash_recovery_area/EPPS
29544   ./flash_recovery_area/backup
33070   ./flash_recovery_area
37705   ./oradata
37705   ./oradata/epps
70775   .

clip_image006

[root@getlnx01 u03]# cd /

[root@getlnx01 /]# du -hm --max-depth=2 | sort -n

有时候搜索出来的结果太多了(譬如,我从根目录开始搜索),一直在刷屏,如果我只想查出最大的12个文件夹,怎么办呢?此时就要借助head命令来显示了

[root@getlnx01 /]# du -hm --max-depth=2 | sort -nr | head -12
407480  .
167880  ./u04
158685  ./u02/oradata
158685  ./u02
152118  ./u04/oradata
70775   ./u03
37705   ./u03/oradata
33070   ./u03/flash_recovery_area
5995    ./u01/app
5995    ./u01
3551    ./usr
1558    ./usr/share
[root@getlnx01 /]# 

clip_image007

 

参考资料:

http://linuxandfriends.com/how-to-find-large-files-in-linux-using-command-line/

 

http://www.docin.com/p-563963500.html

 

 

 

http://www.cnblogs.com/kerrycode/p/4391859.html
 

当Linux 进行查找时,对某些目录的访问可能没有权限而无法进行访问,打印出很多错误消息

1、root目录文件内容

-bash-3.2$ ls
anaconda-ks.cfg  bea  Desktop  lib  wls1036_generic.jar

2、查找.log结尾的文件,

-bash-3.2$ find . -name "*.log"
find: ./.gconfd: æƒé™ä¸å¤Ÿ
find: ./.gnome2: æƒé™ä¸å¤Ÿ
find: ./.gnome2_private: æƒé™ä¸å¤Ÿ
find: ./.Trash: æƒé™ä¸å¤Ÿ
find: ./.java: æƒé™ä¸å¤Ÿ
find: ./.tuscany: æƒé™ä¸å¤Ÿ
find: ./.eggcups: æƒé™ä¸å¤Ÿ
find: ./.chewing: æƒé™ä¸å¤Ÿ
find: ./.mozilla/firefox: æƒé™ä¸å¤Ÿ
find: ./.scim: æƒé™ä¸å¤Ÿ
find: ./.metacity: æƒé™ä¸å¤Ÿ
find: ./.gconf: æƒé™ä¸å¤Ÿ
find: ./.nautilus/metafiles: æƒé™ä¸å¤Ÿ

这时系统语言使用中文反而有问题,很奇怪
-bash-3.2$ echo $LANG
zh_CN.UTF-8

临时改为英文

-bash-3.2$ export LANG="en_US.UTF-8"
-bash-3.2$ echo  $LANG
en_US.UTF-8

然后再查找
-bash-3.2$ find . -name "*.log"
find: ./.gconfd: Permission denied
find: ./.gnome2: Permission denied
find: ./.gnome2_private: Permission denied
find: ./.Trash: Permission denied
find: ./.java: Permission denied
find: ./.tuscany: Permission denied
find: ./.eggcups: Permission denied
find: ./.chewing: Permission denied
find: ./.mozilla/firefox: Permission denied
find: ./.scim: Permission denied
find: ./.metacity: Permission denied
find: ./.gconf: Permission denied
find: ./.nautilus/metafiles: Permission denied

3、将错误输出到/dev/null装置上,错误信息消失
-bash-3.2$ find . -name "*.log" 2>/dev/null
-bash-3.2$ find . -name "*.cfg" 2>/dev/null
./anaconda-ks.cfg

http://blog.csdn.net/hongweigg/article/details/37818697

 

直接利用grep可以在当前目录及其所有子目录中查找文件吗:


# cd /root
# grep -rl "work" *

 

EXAMPLES
       find /tmp -name core -type f -print | xargs /bin/rm -f

       Find files named core in or below the directory /tmp and delete them.  Note that this will work incorrectly if there are any filenames containing newlines, single or  double
       quotes, or spaces.

       find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f

       Find  files  named  core  in or below the directory /tmp and delete them, processing filenames in such a way that file or directory names containing single or double quotes,
       spaces or newlines are correctly handled.  The -name test comes before the -type test in order to avoid having to call stat(2) on every file.

       find . -type f -exec file '{}' \;

       Runs ‘file’ on every file in or below the current directory.  Notice that the braces are enclosed in single quote marks to protect them from interpretation as  shell  script
       punctuation.  The semicolon is similarly protected by the use of a backslash, though single quotes could have been used in that case also.

       find / \( -perm -4000 -fprintf /root/suid.txt '%#m %u %p\n' \) , \
       \( -size +100M -fprintf /root/big.txt '%-10s %p\n' \)

       Traverse the filesystem just once, listing setuid files and directories into /root/suid.txt and large files into /root/big.txt.

       find $HOME -mtime 0

       Search  for files in your home directory which have been modified in the last twenty-four hours.  This command works this way because the time since each file was last modi-
       fied is divided by 24 hours and any remainder is discarded.  That means that to match -mtime 0, a file will have to have a modification in the past which  is  less  than  24
       hours ago.

       find /sbin /usr/sbin -executable \! -readable -print

       Search for files which are executable but not readable.

       find . -perm 664

       Search  for files which have read and write permission for their owner, and group, but which other users can read but not write to.  Files which meet these criteria but have
       other permissions bits set (for example if someone can execute the file) will not be matched.

       find . -perm -664

       Search for files which have read and write permission for their owner and group, and which other users can read, without regard to the presence of any extra permission  bits
       (for example the executable bit).  This will match a file which has mode 0777, for example.

       find . -perm /222

       Search for files which are writable by somebody (their owner, or their group, or anybody else).

       find . -perm /220
       find . -perm /u+w,g+w
       find . -perm /u=w,g=w

       All three of these commands do the same thing, but the first one uses the octal representation of the file mode, and the other two use the symbolic form.  These commands all
       search for files which are writable by either their owner or their group.  The files don’t have to be writable by both the owner and group to be matched; either will do.

       find . -perm -220
       find . -perm -g+w,u+w

       Both these commands do the same thing; search for files which are writable by both their owner and their group.

       find . -perm -444 -perm /222 ! -perm /111
       find . -perm -a+r -perm /a+w ! -perm /a+x

       These two commands both search for files that are readable for everybody ( -perm -444 or -perm -a+r), have at least one write bit set ( -perm /222 or -perm /a+w) but are not
       executable for anybody ( ! -perm /111 and ! -perm /a+x respectively).

       cd /source-dir
       find . -name .snapshot -prune -o \( \! -name *~ -print0 \)|
       cpio -pmd0 /dest-dir

       This  command  copies  the  contents of /source-dir to /dest-dir, but omits files and directories named .snapshot (and anything in them).  It also omits files or directories
       whose name ends in ~, but not their contents.  The construct -prune -o \( ... -print0 \) is quite common.  The idea here is that the expression before -prune matches  things
       which  are  to be pruned.  However, the -prune action itself returns true, so the following -o ensures that the right hand side is evaluated only for those directories which
       didn’t get pruned (the contents of the pruned directories are not even visited, so their contents are irrelevant).  The expression on the right hand side of  the  -o  is  in
       parentheses  only  for clarity.  It emphasises that the -print0 action takes place only for things that didn’t have -prune applied to them.  Because the default ‘and’ condi-
       tion between tests binds more tightly than -o, this is the default anyway, but the parentheses help to show what is going on.

       find repo/ -exec test -d {}/.svn -o -d {}/.git -o -d {}/CVS ; \
       -print -prune

       Given the following directory of projects and their associated SCM administrative directories, perform an efficient search for the projects’ roots:

       repo/project1/CVS
       repo/gnu/project2/.svn
       repo/gnu/project3/.svn
       repo/gnu/project3/src/.svn
       repo/project4/.git

       In this example, -prune prevents unnecessary descent into directories that have already been discovered (for example we do not search project3/src because we  already  found
       project3/.svn), but ensures sibling directories (project2 and project3) are found.

EXIT STATUS
       find exits with status 0 if all files are processed successfully, greater than 0 if errors occur.   This is deliberately a very broad description, but if the return value is
       non-zero, you should not rely on the correctness of the results of find.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Linux 系统,有几种常用的方法来查找文件: 1. `find` 命令:该命令可以在指定目录及其子目录查找文件。例如:`find /path/to/dir -name filename` 将在 `/path/to/dir` 目录查找名为 `filename` 的文件。 2. `locate` 命令:该命令使用文件数据库,可以快速查找文件。例如:`locate filename` 将查找所有名为 `filename` 的文件。 3. `which` 命令:该命令可以查找系统特定命令的完整路径。例如:`which filename` 将查找名为 `filename` 的命令的完整路径。 4. `whereis` 命令:该命令可以查找系统命令的位置,以及关于命令的相关文件。例如:`whereis filename` 将查找名为 `filename` 的命令的位置。 ### 回答2: 在Linux系统,我们可以使用一些命令来查找文件。常用的命令有find和locate。 以find命令为例,其基本语法为: find [路径] [选项] [表达式] 其,路径表示要查找目录,默认为当前目录。选项可以指定一些条件或配置,表达式则是用来匹配文件的模式。 例如,要查找当前目录下所有以.txt结尾的文件,可以使用以下命令: find . -name "*.txt" 其的.表示当前目录,-name表示按文件名匹配,*.txt表示以.txt结尾。 通过find命令,我们还可以根据文件类型、大小、权限等进行更详细的查找。例如,以下命令可以查找当前目录下大于1MB并且是普通文件文件: find . -type f -size +1M 除了find命令,还有一个常用的命令是locate。locate命令的查找速度更快,但需要先更新文件索引数据库。可以使用以下命令更新索引: sudo updatedb 然后,就可以使用locate命令来查找文件了。例如,以下命令可以查找以.txt结尾的文件: locate "*.txt" 总结而言,Linux系统提供了灵活而强大的文件查找工具,可以根据不同的需求使用find或locate命令进行文件查找。通过灵活运用命令的选项和表达式,我们可以更加高效地找到所需的文件。 ### 回答3: 在Linux系统,我们可以使用一些命令来查找文件。下面介绍几个常用的命令: 1. find命令:find命令用于在指定目录及其子目录搜索文件,可以根据文件名、文件类型、文件大小等条件进行搜索。例如,要在当前目录查找名为"file.txt"的文件,可以执行命令:find . -name "file.txt"。 2. locate命令:locate命令用于快速定位文件,它会在数据库查找文件,因此速度比find命令更快。但是需要注意的是,由于数据库不是实时更新的,所以如果文件在最近才被创建,可能无法通过locate找到。要使用locate命令,可以执行命令:locate "file.txt"。 3. grep命令:grep命令可以在文件搜索指定的字符串,可以用来找到包含某个关键字的文件。例如,要在当前目录查找包含"keyword"的文件,可以执行命令:grep -rnw . -e "keyword"。 4. which命令:which命令用于查找指定命令的路径。例如,要查找"ls"命令的路径,可以执行命令:which ls。 使用这些命令可以方便地在Linux系统查找文件。通过加上合适的参数及选项,可以更加准确地定位需要查找文件。在实际使用,根据具体的需求选择合适的命令来进行查找
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值