UP | HOME

文件管理

Table of Contents

1 创建

1.1 创建两个空文件

touch file1 file2

1.2 递归式创建一些嵌套目录

mkdir -pv /tmp/xxs/dsd/efd

1.3 复制文件或者目录

cp -av 原文件或原目录 新文件或新目录

2 查看

2.1 一屏查看文件内容

cat 文件名

2.2 不显示以#开头的行

cat /etc/vsftpd.conf |grep -v ^#

2.3 分页查看文件内容

more 文件名

2.4 可控分页查看文件内容

less 文件名

2.5 带行号显示文件的内容

nl 文件名
cat -n 文件名

2.6 根据字符串匹配来查看文件部分内容

grep 字符串 文件名

2.7 回当前用户的宿主目录

cd ~
# 或者更简单的
cd

2.8 回到上一次的目录

cd -

2.9 查看当前所在目录的绝对路经

pwd

2.10 列出当前目录下的所有文件,包括以.开头的隐含文件

ls -a

2.11 查看文件类型

file filename

2.12 显示xxx文件倒数6行的内容

tail -6 xxx

2.13 查看文件中间的第五行(含)到第10行(含)的内容

sed -n '5,10p' /var/log/apache2/access.log    

2.14 查看当前目录的子目录

ls -d */ 或 echo */

2.15 将当前目录下最近2小时到8小时之内的文件显示出来

find . -mmin +120 -mmin -480 -exec more {} \;

3 修改

3.1 去除文件中的行号

cut -c 5- a.py

3.2 删除文件中的重复行

cat file.txt |sort -u

3.3 显示包含或者不包含字符串的文件名

grep -l -r 字符串 路径 #显示内容包含字符串的文件名
grep -L -r 字符串 路径 #显示内容不包含字符串的文件名
find . -path './cache' -prune -o -name "*.php" -exec grep -l "date_cache[$format]['lang']" {} \; #显示当前目录下不包含cache目录的所有含有“date_cache[$format]['lang']”字符串的php文件。
find . -type f -name \*.php -exec grep -l "info" {} \;

3.4 获得文件的后缀名

echo xxx.xxx.rmvb |sed 's/.*\(\..*$\)/\1/'    

3.5 去除文件的后缀名

echo xxx.xxx.rmvb |sed 's/\(.*\)\..*$/\1/'    

3.6 移动路径下的文件并改名

mv 路径/文件  /新路径/新文件名

3.7 把所有文件的後辍由rm改为rmvb

rename 's/.rm$/.rmvb/' *

3.8 把所有文件名中的大写改为小写

rename 'tr/A-Z/a-z/' *

3.9 去掉文件中的^M

#注意不要使用同样的文件名,会清空掉原文件
cat filename | tr -d "^M" > newfile;
或者
sed -e "s/^M//g" filename > newfile;
或者
ex "+:%s/[Ctrl+V][Enter]//g" "+:wq"  filename #直接修改文件    

3.10 合并多个pdf文件到一个pdf文件

#apt-get install gs pdftk
gs -dNOPAUSE -sDEVICE=pdfwrite -sOUTPUTFILE=output.pdf -dBATCH input1.pdf input2.pdf

3.11 批量修改文件和目录的权限

批量修改src目录下所有文件的权限为644:

find src -type f -exec chmod 644 {} \;

批量修改src目录下的所有子目录的权限为755:

find src -type d -exec chmod 755 {} \;

4 删除

4.1 递归式删除嵌套目录

rm -fr /tmp/xxs

4.2 删除特殊文件名的文件,如文件名:–help.txt

rm -- --help.txt 或者 rm ./--help.txt

4.3 删除当前目录里面所有的 .svn 目录

find . -name .svn -type d -exec rm -fr {} \;

4.4 删除当前目录所有以“~”结尾的临时文件

find . -name "*~" -exec rm {} \;

5 查找

5.1 快速查找某个文件

whereis filename
find 目录 -name 文件名
locate 文件名 # 注意,为了得到更好的效果,运行前可以更新下数据库,运行 sudo updatedb 即可,但这个命令每隔一段时间会自动运行,所以不用太在意

5.2 查找不以java和xml结尾,并7天没有使用的文件删除掉

find . ! -name *.java ! -name ‘*.xml’ -atime +7 -exec rm {} \;

5.3 查找目录下所有有包含abcd文字的文本文件,并替换为xyz

grep -rIl "abcd" ./* --color=never | xargs sed -i "s/abcd/xyz/g" #注意grep的一个参数是大写的i,一个参数是小写的L

6 比较

6.1 对比两个文件之间的差异 

diff file1 file2    

6.2 比较两个目录里面的文件是否有相同

diff -r dir1 dir2

7 统计

7.1 统计当前文件个数

ls /usr/bin|wc -w    

7.2 统计最常用的10条命令

history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10    

7.3 统计每个单词的出现频率,并排序

awk '{arr[$1]+=1 }END{for(i in arr){print arr[i]"\t"i}}' FILE_NAME | sort -rn

7.4 统计80端口的连接个数并按照从大到小排列

netstat -na|grep :80|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r -n

8 校验

8.1 MD5校验

md5 filetohashA.txt

8.2 将MD5的值写入文件

md5sum filetohashA.txt > hash.md5  % 创建hash.md5文件并添加filetohashA.txt的md5值
md5sum filetohashB.txt >> hash.md5 % 往hash.md5文件里添加filetohashB.txt的md5值

Date: 2012-04-11 Wed

Author: Joseph Pan

Validate XHTML 1.0