你可以參考如下實例代碼:function?getFile(file_name)?
石臺ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!
local?f?=?assert(io.open(file_name,?'r'))
local?string?=?f:read("*all")
f:close()
return?string
end?function?writeFile(file_name,string)
local?f?=?assert(io.open(file_name,?'w'))
f:write(string)
f:close()
end?--從命令行獲取參數(shù),?如果有參數(shù)則遍歷指定目錄,沒有參數(shù)遍歷當(dāng)前目錄?if?arg[1]?~=?nil?then
cmd?=?"ls?"..arg[1]
else
cmd?=?"ls"?end?print("cmd",?cmd)
--io.popen?返回的是一個FILE,跟c里面的popen一樣?local?s?=?io.popen(cmd)
local?fileLists?=?s:read("*all")
print(fileLists)
while?true?do?--從文件列表里一行一行的獲取文件名?_,end_pos,?line?=?string.find(fileLists,?"([^\n\r]+.txt)",?start_pos)
if?not?end_pos?then?break?end?--????print?("wld",?line)?local?str?=?getFile(line)
--把每一行的末尾?1,?替換為?0,?local?new?=string.gsub(str,?"1,\n",?"0,\n");
--替換后的字符串寫入到文件。以前的內(nèi)容會清空?????writeFile(line,?new)
start_pos?=?end_pos?+?1?end
先設(shè)定實驗環(huán)境:
# 造 5 個 目錄,每個目錄下,造 3 個 文件和兩個子目錄如下:
cd $HOME/tmp
for i in d1 d2 d3 d4 d5
do
mkdir -p $i
touch $i/1.txt $i/2.txt $i/3.txt
mkdir -p $i/tmp1 $i/tmp2
done
# 檢驗測試環(huán)境:
$ ls -lR d1
total 0
-rw-r--r-- 1 wenlee comm 0 Dec 22 10:35 1.txt
-rw-r--r-- 1 wenlee comm 0 Dec 22 10:35 2.txt
-rw-r--r-- 1 wenlee comm 0 Dec 22 10:35 3.txt
drwxr-sr-x 2 wenlee comm 256 Dec 22 10:35 tmp1/
drwxr-sr-x 2 wenlee comm 256 Dec 22 10:35 tmp2/
# 利用下列腳本來實現(xiàn)你要做的:
cd $HOME/tmp
for i in */1.txt
do
echo "Found $i, save $i and remove everything else under $(dirname $i)/"
save_this_file=$(basename $i)
curr_dir=$(dirname $i)
# 把這個1.txt暫時存到/tmp里面去,為了避免已經(jīng)有同樣的檔案名稱在/tmp,加上$$ (i.e. PID)
mv $i /tmp/${save_this_file}.$$
rm -rf $curr_dir
mkdir -p $curr_dir
mv /tmp/${save_this_file}.$$ $curr_dir
done
# 屏幕執(zhí)行輸出如下:
Found d1/1.txt, save d1/1.txt and remove everything else under d1/
Found d2/1.txt, save d2/1.txt and remove everything else under d2/
Found d3/1.txt, save d3/1.txt and remove everything else under d3/
Found d4/1.txt, save d4/1.txt and remove everything else under d4/
Found d5/1.txt, save d5/1.txt and remove everything else under d5/
# 復(fù)驗實驗環(huán)境:
$ ls -l d?/*
-rw-r--r-- 1 wenlee comm 0 Dec 22 10:35 d1/1.txt
-rw-r--r-- 1 wenlee comm 0 Dec 22 10:35 d2/1.txt
-rw-r--r-- 1 wenlee comm 0 Dec 22 10:35 d3/1.txt
-rw-r--r-- 1 wenlee comm 0 Dec 22 10:35 d4/1.txt
-rw-r--r-- 1 wenlee comm 0 Dec 22 10:35 d5/1.txt
OK?
thanks!
1、系統(tǒng)里面沒有/usr/keygoe/ini文件夾或沒有權(quán)限。可以修改main, 遍歷命令行傳入的文件夾;
2、filename設(shè)置為[256][256],如果文件比較多,程序會崩潰的;
3、遍歷子文件夾時,只保存了文件名,沒有添加上級路徑。
find . -name a.txt -exec mv {} b.txt \; 其中find后面的"."表示從當(dāng)前目錄開始查找(含子目錄),注意最后的“\;"是需要的。
寫一個函數(shù),函數(shù)的參數(shù)是目錄路徑字符串
函數(shù)內(nèi)使用 ls -s dir_path , 然后for 遍歷循環(huán)
如果是目錄則繼續(xù)調(diào)用自身
如果是文件則答應(yīng)文件名
從執(zhí)行優(yōu)化的角度來講,可以把判斷目錄還是文件的代碼放在循環(huán)外層.
好久沒寫shell了 ,我這也沒環(huán)境測試 , 只能給個思路,函數(shù)的具體寫法自己找一下資料吧.
另外,find命令可以直接完成你要做的事.
#!/bin/bash
((?$#??1?))??echo?"param?is?zero!"??exit?1
[?!?-d?$1?]??echo?"$1?not?path"??exit?1
dir=$1
dir_p="$dir?Directory?:"
cd?$dir
dir=`pwd`
for?i?in?`ls?$dir`
do
if?[?-d?$i?];?then
/tmp/sh/dir_file?$i????????????#我的腳本文件在/tmp/sh中,需要改一下這里
else
dir_p="$dir_p?File?$i"
fi
done
cd?..
echo?$dir_p
實驗結(jié)果:
[root@localhost sh]# ./dir_file /tmp/python/
python_2 Directory : File 1.log File 2.log
python_3 Directory : File 3.log
/tmp/python/ Directory : File p File t.py File y.py
這樣應(yīng)該可以吧,試試看