linux下的文件操作——批量重命名


 

 

概述:在日常工作中,我們經常需要對一批文件進行重命名操作,例如將所有的jpg文件改成bnp,將名字中的1改成one,等等。文本主要為你講解如何實現這些操作

 

1、刪除所有的 .bak 后綴:


rename 's/\.bak$//' *.bak

注意,這個命令的格式組織如下:s/   \.bark$   / / 是s/para1/para2/ 這個有點想sed的語法,將para1匹配的字符串換成para2

 

2、把 .jpe 文件后綴修改為 .jpg:


rename 's/\.jpe$/\.jpg/' *.jpe

 

3、把所有文件的文件名改為小寫:


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

 

4、將 abcd.jpg 重命名為 abcd_efg.jpg:


for var in *.jpg; do mv "$var" "${var%.jpg}_efg.jpg"; done

其中,此處涉及到shell的字符串匹配操作:

1> ${variable#pattern}
如果pattern匹配variable的開始部分,從variable的開始處刪除字符直到第一個匹配的位置,包括匹配部分,返回剩余部分。

2> ${variable##pattern}
如果pattern匹配variable的開始部分,從variable的開始處刪除字符直到最后一個匹配的位置,包括匹配部分,返回剩余部分。

3> ${variable%pattern}
如果pattern匹配variable的結尾部分,從variable的結尾處刪除字符直到第一個匹配的位置,包括匹配部分,返回剩余部分。

4> ${variable%%pattern}
如果pattern匹配variable的結尾部分,從variable的結尾處刪除字符直到最后一個匹配的位置,包括匹配部分,返回剩余部分。

 

5、將 abcd_efg.jpg 重命名為 abcd_lmn.jpg:


for var in *.jpg; do mv "$var" "${var%_efg.jpg}_lmn.jpg"; done

 

6、把文件名中所有小寫字母改為大寫字母:


for var in `ls`; do mv -f "$var" `echo "$var" |tr a-z A-Z`; done

tr:traslate or delete characters

 

7、把格式 *_?.jpg 的文件改為 *_0?.jpg:

 

for var in `ls *_?.jpg`; do mv "$var" `echo "$var" |awk -F '_' '{print $1 "_0" $2}'`; done

 

8、把文件名的前三個字母變為 vzomik:


for var in `ls`; do mv -f "$var" `echo "$var" |sed 's/^.../vzomik/'`; done

 

9、把文件名的后四個字母變為 vzomik:


for var in `ls`; do mv -f "$var" `echo "$var" |sed 's/....$/vzomik/'`; done

 

參考:

文本來源:誰不小心的CSDN博客:linux文件操作——批量重命名

gzip
壓縮后的格式為:*.gz

這種壓縮方式不能保存原文件;且不能壓縮目錄

命令舉例:
#壓縮
[root@localhost tmp]# gzip buodo
[root@localhost tmp]# ls
buodo.gz
#解壓
[root@localhost tmp]# gunzip buodo.gz
[root@localhost tmp]# ls
buodo

tar
命令選項:
-z(gzip) 用gzip來壓縮/解壓縮文件
-j(bzip2) 用bzip2來壓縮/解壓縮文件
-v(verbose) 詳細報告tar處理的文件信息
-c(create) 創建新的檔案文件
-x(extract) 解壓縮文件或目錄
-f(file) 使用檔案文件或設備,這個選項通常是必選的。

命令舉例:
#壓縮
[root@localhost tmp]# tar -zvcf buodo.tar.gz buodo
[root@localhost tmp]# tar -jvcf buodo.tar.bz2 buodo

#解壓
[root@localhost tmp]# tar -zvxf buodo.tar.gz
[root@localhost tmp]# tar -jvxf buodo.tar.bz2

zip
與gzip相比:1)可以壓縮目錄; 2)可以保留原文件;

選項:

-r(recursive) 遞歸壓縮目錄內的所有文件和目錄
1
命令舉例:
#壓縮和解壓文件
[root@localhost tmp]# zip boduo.zip boduo
[root@localhost tmp]# unzip boduo.zip

#壓縮和解壓目錄
[root@localhost tmp]# zip -r Demo.zip Demo

[root@localhost tmp]# unzip Demo.zip

bzip2
壓縮后的格式:.bz2
參數
-k 產生壓縮文件后保留原文件
1
命令舉例
#壓縮
[root@localhost tmp]# bzip2 boduo
[root@localhost tmp]# bzip2 -k boduo

#解壓
[root@localhost tmp]# bunzip2 boduo.bz2

今天又有同學問linux下怎樣批量更改文件后綴名,這個問題被別人問到三次了,所以這里給出幾個解決方法

 

一.rename解決

1.  Ubuntu系統下

rename 's//.c//.h/'  ./*

 

把當前目錄下的后綴名為.c的文件更改為.h的文件

 

2.  CentOS5.5系統下

rename .c  .h   *.c

 

把當前目錄下的后綴名為.c的文件更改為.h的文件

 

二.shell 腳本解決

#!/bin/bash

#http://blog.csdn.net/longxibendi
find ./ -name *.c  | while read i
do
        echo "$i";
        mv $i.c  $i.h
done
 

三.find  xargs 解決


 find ./ -name "*.c" | awk -F "." '{print $2}' | xargs -i -t mv ./{}.c  ./{}.h

 

注意,第三種方案是遞歸的更改,會更改當前目錄下及其子目錄下所有匹配文件

6.重命名中間某個字符

如我想將Locust _223_344.fq.gz 改為ZHDH_223_344.fq.gz

可用 

sudo rename Locust ZHDH * 

7.刪除含有特定字符的行"sed“使用”

比如a1.txt

BH_1

bH_2

sed -e '/_2/d' a1.txt > a2.txt

BH_1

 8.重命名一個文件

mv re.txt rename.txt

cut 命令使用

cat SULTS.CSV |cut -d "," -f 3

    • -b :以字節為單位進行分割。這些字節位置將忽略多字節字符邊界,除非也指定了 -n 標志。
    • -c :以字符為單位進行分割。
    • -d :自定義分隔符,默認為制表符。[示例以逗號分割]
    • -f :與-d一起使用,指定顯示哪個區域。[第三行]
    • -n :取消分割多字節字符。僅和 -b 標志一起使用。如果字符的最后一個字節落在由 -b 標志的 List 參數指示的
      范圍之內,該字符將被寫出;否則,該字符將被排除

9. 查看文件夾大小

du -h uce

uce為文件夾名

 如果當前目錄下文件和文件夾很多,使用不帶參數du的命令,可以循環列出所有文件和文件夾所使用的空間。這對查看究竟是那個地方過大是不利的,所以得指定深入目錄的層數,參數:--max-depth=(-d),這是個極為有用的參數!如下,注意使用“*”,可以得到文件的使用空間大小。

wc [-lmw]

  參數說明:

  -l :多少行

  -m:多少字符

  -w:多少字


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM