shell 例項之檔案操作

2021-08-05 23:28:12 字數 2754 閱讀 5799

#!/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 功能...