#!/bin/bash
# 建立檔案
if [ ! -d testdir ]; then
mkdir testdir
ficd testdir
if [ ! -f test.lua.bak.2017 ]; then
touch test.lua.bak.2017
fiif [ ! -d subdir ]; then
mkdir subdir
cd subdir
touch init.lua
cd ..
ficd ..
# 遍歷所有檔案
searchfile
()searchfile ./testdir
執行結果
now in ./testdir
now in ./testdir/subdir
./testdir/subdir/init.lua
./testdir/test.lua
.bak
.2017
這個指令碼所做的工作,首先在指令碼所在的目錄下建立乙個子目錄 testdir,然後在 testdir 下新建乙個檔案 test.lua.bak.2017 和乙個子目錄 subdir,再在 subdir 下建立乙個檔案 init.lua。建立完檔案後,切換回指令碼所在目錄,遍歷 testdir 下面的所有檔案。
函式 searchfile 接收乙個引數,表示要遍歷的資料夾,首次呼叫時傳 ./testdir 進去,表示從 ./testdir 這個目錄開始遍歷。然後遍歷 $1/* 就可以得到當前遍歷目錄下的所有檔案或子目錄,使用 -f 測試是否為普通檔案,使用 -d 測試是否為目錄。如果是普通檔案,直接輸出檔案的路徑,如果是目錄,則遞迴呼叫 searchfile。
#!/bin/bash
# 建立檔案
if [ ! -d testdir ]; then
mkdir testdir
ficd testdir
if [ ! -f test.lua.bak.2017 ]; then
touch test.lua.bak.2017
fiif [ ! -d subdir ]; then
mkdir subdir
cd subdir
touch init.lua
cd ..
ficd ..
# 取檔名和字尾名
getname
() filename=$
extname=$
echo full name: $fullname
echo filename: $filename
echo extenname: $extname
}# 遍歷所有檔案
searchfile
()searchfile ./testdir
擴充套件上面的指令碼,新增乙個取檔案的檔名和字尾名的函式。在這個函式裡,使用 % 和 # 來分割字串。
舉個例子,對檔案name=test.lua.bak.2017
,
$=test.lua.bak
,因為匹配 .2017 後就停止查詢了,刪掉 .2017 後就得到結果 test.lua.bak。
$=test
,因為得匹配到 .lua.bak.2017 才停止查詢,刪掉 .lua.bak.2017 就得到結果 test。
$=lua.bak.2017
,因為匹配到 test. 後就停止查詢了,刪掉 test. 後就得到結果 lua.bak.2017。
$=2017
,因為得匹配到 test.lua.bak. 才停止查詢,刪掉 test.lua.bak. 後就得到結果 2017。
一般檔案的字尾名都是最後的 .ext,所以取檔名使用非貪婪的 %,取字尾名使用貪婪的 ##。
指令碼執行結果
now in ./testdir
now in ./testdir/subdir
full name: init.lua
filename: init
extenname: lua
full name: test.lua
.bak
.2017
filename: test.lua
.bak
extenname:
2017
需求:找到 ./src 目錄下的所有 lua 檔案,將其字尾名以為 .c 並儲存在 ./out 目錄下,要保持原來的目錄結構。
#!/bin/bash
if [ ! -d src ]; then
echo
"src 目錄不存在!"
exit1fi
if [ -d out ]; then
rm -r out
fimkdir out
function search
() = lua ]]; then
local dest=$
dest=$
echo copy $sub to $dest
cp $sub
$dest
fielif [ -d
$sub ]; then
newdir=$
mkdir $newdir
search $sub
fidone
}search ./src
shell 檔案操作
1 檔案建立 刪除 touch abc.txt 建立乙個空檔案 rm abc.txt 刪除乙個檔案 rm f abc.txt 強制刪除檔案 2 檔案複製 移動 cp 1 txt tmp 將檔案1.txt複製到tmp目錄下 mv 1.txt tmp 將檔案1.txt移動到tmp目錄下 3 檔案內容檢視...
檔案操作例項
開發資料查詢 define crt secure no warnings include include include include include define path kaifang.txt char g pp 全域性的二級指標 int imax 20151574 標示有多少行 int g...
Python之檔案操作例項 批量修改檔案的字首名
匯入包,很重要的 import os 建立資料夾及檔案 os.mkdir test for i in range 1,6 os.mkdir test test str i fp open test test str i txt w encoding utf 8 while true print 功能...