亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標(biāo)題:
還是批量重命名文件,但是這次是根據(jù)文件名長度
[打印本頁]
作者:
610302547
時間:
2014-08-19 09:05
標(biāo)題:
還是批量重命名文件,但是這次是根據(jù)文件名長度
本帖最后由 610302547 于 2014-08-19 15:04 編輯
HI all,
當(dāng)前有一個需求, 需要重命名/data/ 目錄下面的多個文件, 規(guī)則是, 文件名長度不足20位就自動在文件名后面補0,直到達到20位.超過20位的不做操作.
例如:
# ls /data/
20140099.txt 2015000.txt ~22299.txt
以上三個文件中,第一個文件包括后綴名為12位, 第二個文件包括后綴名為11位, 第三個文件包括后綴名為10位,
重命名后的文件名為:
2014009900000000.txt 2015000000000000.txt ~222990000000000.txt
大概的思路是for 遍歷所有文件,并判斷文件名長度,如果小于20位然后補0,
問題是我不知道怎么直接補0到20位!
UPDATE:
==================================
新需求, 如果后綴有大小寫區(qū)別,并且后綴多樣(txt,png,jpg,abcd,1234455等) 但是這個文件的長度還是需要20位,
作者:
dn833
時間:
2014-08-19 09:30
#!/bin/bash
for i in *.txt
do
if [ ${#i} -eq 12 ];then
echo "rename \"${i%.*}\" \"${i%.*}00000000\" \"$i\""
elif [ ${#i} -eq 11 ];then
echo "rename \"${i%.*}\" \"${i%.*}000000000\" \"$i\""
elif [ ${#i} -eq 10 ];then
echo "rename \"${i%.*}\" \"${i%.*}0000000000\" \"$i\""
fi
done
復(fù)制代碼
作者:
Herowinter
時間:
2014-08-19 09:32
回復(fù)
1#
610302547
[root@lnx-rh6-x64 test]# for filename in `ls *.txt`; do file_base=${filename%%.*};while [ ${#file_base} -lt 16 ];do file_base="${file_base}0";done;mv "$filename" "${file_base}.txt";done
[root@lnx-rh6-x64 test]# ls
2014009900000000.txt 2015000000000000.txt ~222990000000000.txt
復(fù)制代碼
如果后綴名不是固定.txt,自己截取一下后綴名,把那個長度另算一下.
作者:
ly5066113
時間:
2014-08-19 09:33
回復(fù)
1#
610302547
try:
for f in *.txt
do
if [ ${#f} -lt 20 ]
then
nf=${f%.*}000000000000000
nf=${nf:0:16}.txt
mv $f $nf
fi
done
復(fù)制代碼
作者:
圣西羅門柱
時間:
2014-08-19 09:40
回復(fù)
4#
ly5066113
請教下${f%.*}是什么意思 正則匹配嗎?
作者:
ly5066113
時間:
2014-08-19 09:44
回復(fù)
5#
圣西羅門柱
http://www.72891.cn/forum.p ... p;page=7#pid1617953
作者:
li0924
時間:
2014-08-19 09:54
ll data/|awk 'length($NF)<20 && NR>1{split($NF,a,".");while(length(a[1] a[2]) < 20){a[1]=a[1] "0"};system("mv " $NF " " a[1]"."a[2])}'
復(fù)制代碼
作者:
610302547
時間:
2014-08-19 11:37
回復(fù)
4#
ly5066113
4樓牛逼, 請教下兩個nf都是什么意思?
作者:
klainogn
時間:
2014-08-19 13:01
看六樓
回復(fù)
8#
610302547
作者:
jason680
時間:
2014-08-19 13:14
回復(fù)
1#
610302547
Would you like this ...
$ ls
20140099.txt 2015000.txt ~22299.txt
$ rename 's/^(.+)([.]txt)/$1.(
"0"
x (
20
-length("$1$2"))).$2/e' *.txt
$ ls
2014009900000000.txt 2015000000000000.txt ~222990000000000.txt
$ rename
Usage: rename [-v] [-n] [-f]
perlexpr
[filenames]
作者:
610302547
時間:
2014-08-19 13:26
本帖最后由 610302547 于 2014-08-19 15:10 編輯
曉得了, 謝謝樓上各位大牛, 只怪自己沒好好看shell十三問, 丟人了!
回復(fù)
9#
klainogn
作者:
610302547
時間:
2014-08-19 15:02
回復(fù)
10#
jason680
Hi Jason,
新需求不知道是否還能用你這種方法去做呢?
作者:
zhaopingzi
時間:
2014-08-19 15:06
回復(fù)
8#
610302547
很明顯是nf是new file的意思
作者:
610302547
時間:
2014-08-19 15:09
回復(fù)
13#
zhaopingzi
哈哈, 這個我知道, 我說nf后面的意思, 不過現(xiàn)在知道是什么意思.
作者:
610302547
時間:
2014-08-19 15:59
回復(fù)
7#
li0924
謝謝, 按照這種方法是可以不用考慮后綴的, 問題解決, 謝謝, 但是你最后的那個30要改成29, 這樣最后整個文件名的長度才是30位.
作者:
jason680
時間:
2014-08-19 16:11
回復(fù)
12#
610302547
Yes, you can
$ ls
123.jpg 13240.txt 456.abcd abc.png
$ rename 's/^(.+)(
[.]
.+)/$1.("0" x (
20
-length("$1$2"))).$2/e' *
$ ls
1230000000000000.jpg 456000000000000.abcd
1324000000000000.txt abc0000000000000.png
作者:
610302547
時間:
2014-08-19 16:41
回復(fù)
16#
jason680
Hi Jason,
Thank you for your attention.
seems not working on my system , as below screen shot,
renamefile.jpg
(10.58 KB, 下載次數(shù): 71)
下載附件
rename
2014-08-19 16:40 上傳
作者:
MeRcy_PM
時間:
2014-08-19 17:00
可以強行補20位再截取一下吧。
作者:
610302547
時間:
2014-08-19 17:21
回復(fù)
18#
MeRcy_PM
完全可以的. 補100個也沒問題的. 謝謝!
作者:
jason680
時間:
2014-08-20 09:35
回復(fù)
17#
610302547
我的rename不支持正則
http://www.72891.cn/forum.p ... mp;fromuid=24785593
作者:
610302547
時間:
2014-08-20 13:29
謝謝!
回復(fù)
20#
jason680
歡迎光臨 Chinaunix (http://www.72891.cn/)
Powered by Discuz! X3.2