① linux shell遍歷當前文件夾中的txt文件並處理生成新的文件
先以a.txt為例:
awk-vRS=""'{
n=split($0,a,"《[^》]+》");
for(i=2;i<n;i+=2)
print"《keywords》"a[i]"《/keywords》"
}'a.txt>>./newfile/a.txt
這樣就行了。
為了可讀性,我將一條awk語句寫成了多行。回
實際測試結答果如下:
解說:
RS=""
將awk的記錄分隔符設置為空(默認是換行符),即將整個a.txt文本看做一條記錄。
n = split($0,a,"《[^》]+》");
以正則"《[^》]+》"匹配的內容作為分隔符,對文本內容進行分割並將分割結果存入數組a,分割出的數目(數組大小)即為split函數的返回值n。這里暫且不對該正則做過多解釋,否則喧賓奪主,有需要請追問,我再補充。
for(i=2;i<n;i+=2)
print "《keywords》"a[i]"《/keywords》"
列印數組下標為偶數的元素並在首尾分別加上關鍵字標記以還原。數組下標從1開始。
其他文件可作相同處理。如果文件較多,你可以搞個循環去做。這個應該不難。
② linux 常用目錄文件操作命令有哪些
1. 最常用的命令列表
下面列出十個在使用linux過程中使用頻率最高的命令。這里只作簡單介紹,具體用法請參考後面內容。
cat,顯示文件內容。
cd,改變目錄路徑。
cp,復制文件。
find,查找文件。
grep,搜索、過濾信息。
ls,列出目錄信息。
more,分頁顯示。
rm,刪除文件或目錄。
vi,調用vi文本編輯器。
who,顯示登錄用戶信息。
2. chmod----改變一個或多個文件的存取模式(mode)
chmod [options] mode files
只能文件屬主或特權用戶才能使用該功能來改變文件存取模式。mode可以是數字形式或以who opcode permission形式表示。who是可選的,默認是a(所有用戶)。只能選擇一個opcode(操作碼)。可指定多個mode,以逗號分開。
options:
-c,--changes
只輸出被改變文件的信息
-f,--silent,--quiet
當chmod不能改變文件模式時,不通知文件的用戶
--help
輸出幫助信息。
-R,--recursive
可遞歸遍歷子目錄,把修改應到目錄下所有文件和子目錄
--reference=filename
參照filename的許可權來設置許可權
-v,--verbose
無論修改是否成功,輸出每個文件的信息
--version
輸出版本信息。
who
u
用戶
g
組
o
其它
a
所有用戶(默認)
opcode
+
增加許可權
-
刪除許可權
=
重新分配許可權
permission
r
讀
w
寫
x
執行
s
設置用戶(或組)的ID號
t
設置粘著位(sticky bit),防止文件或目錄被非屬主刪除
u
用戶的當前許可權
g
組的當前許可權
o
其他用戶的當前許可權
作為選擇,我們多數用三位八進制數字的形式來表示許可權,第一位指定屬主的許可權,第二位指定組許可權,第三位指定其他用戶的許可權,每位通過4(讀)、2(寫)、1(執行)三種數值的和來確定許可權。如6(4+2)代表有讀寫權,7(4+2+1)有讀、寫和執行的許可權。
還可設置第四位,它位於三位許可權序列的前面,第四位數字取值是4,2,1,代表意思如下:
4,執行時設置用戶ID,用於授權給基於文件屬主的進程,而不是給創建此進程的用戶。
2,執行時設置用戶組ID,用於授權給基於文件所在組的進程,而不是基於創建此進程的用戶。
1,設置粘著位。
實例:
$ chmod u+x file 給file的屬主增加執行許可權
$ chmod 751 file 給file的屬主分配讀、寫、執行(7)的許可權,給file的所在組分配讀、執行(5)的許可權,給其他用戶分配執行(1)的許可權
$ chmod u=rwx,g=rx,o=x file 上例的另一種形式
$ chmod =r file 為所有用戶分配讀許可權
$ chmod 444 file 同上例
$ chmod a-wx,a+r 同上例
$ chmod -R u+r directory 遞歸地給directory目錄下所有文件和子目錄的屬主分配讀的許可權
$ chmod 4755 設置用ID,給屬主分配讀、寫和執行許可權,給組和其他用戶分配讀、執行的許可權。
3. chgrp----修改文件或目錄的所屬組
chgrp [options] newgroup files/directorys
組名可以用組的ID號,也可用/etc/group中的組名。只有文件的屬主或特權用戶(root)才可改變它的組。
options:
-c,--changes
只輸出被改變文件的信息
-f,--silent,--quiet
當不能改變文件組屬性時,不通知文件的用戶
--help
輸出幫助信息。
-R,--recursive
可遞歸遍歷子目錄,把修改應到目錄下所有文件和子目錄
--reference=filename
參照filename的組信息來設置當前文件的組
-v,--verbose
輸出詳細信息
--version
輸出版本信息。
實例:
$ chgrp root test 把test的所屬組更改root組
$ chgrp -R mysql test 遞歸地把test目錄及該目錄下所有文件和子目錄的組屬性設置成mysql
$ chgrp root * 把當前目錄中所有文件的組屬性設置成root
4. chown----設置一個或多個文件或目錄的屬主身份
chown [options] newowner files/directorys
新的屬主可以是用戶的ID號,也可以是/etc/passwd里的登錄名。chown也可接受這樣的形式:newowner:newgroup或newowner.newgroup。同時改變所屬組的屬性。如果句點和冒號後沒有組名,則組改變為新屬主的組。只有文件或目錄的當前屬主才有權改變它的屬性。
options:
-c,--changes
只輸出被改變文件的信息
--dereference
跟蹤符號鏈接
-h,--no-dereference
改變每一個符號鏈的屬主身份,而不是被引用文件的屬主身份
-f,--silent,--quiet
當不能改變文件屬主屬性時,不通知文件的用戶
--help
輸出幫助信息。
-R,--recursive
可遞歸遍歷子目錄,把修改應到目錄下所有文件和子目錄
--reference=filename
把屬主改變成filename文件的屬主
-v,--verbose
輸出詳細信息
--version
輸出版本信息。
實例:
$ chown root test 把test文件的屬主改進root
$ chown -R root test_directory 遞歸地把test_directory目錄下的所有文件屬主改成root
$ chown --dereference root test_link 把test_link鏈接的原文件屬主改成root,鏈接文件屬主不變
$ chown --no-dereference root test_link 把test_link的鏈接文件屬主改成root,原文件屬主不變
5. date----顯示、修改系統時間
date [options][+format][date]
$ date -s 06/09/2004 修改日期(按月日年格式)
$ date -s 13:56:00 修改時間(按時分秒格式)
$ date -r test 顯示test文件最後一次的修改時間
$ date +'%Y-%m-%d' 以yyyy-mm-dd格式顯示日期,其它格式請參考幫助
$ clock -r 查詢BIOS時間
$ clock -w 把修改後的時間寫回BIOS
6. df-----顯示已安裝文件系統的磁碟容量狀態
df [options][name]
$ df -h 以友好的格式輸出所有已安裝文件系統的磁碟容量狀態
$ df -m /home 以M為單位輸出home目錄的磁碟容量狀態
$ df -k 以K為單位輸出所有已安裝文件系統的磁碟容量狀態
$ df -i 報告空閑的、用過的或部份用過的(百份比)索引節點
$ df -t ext3 僅顯示文件類型為ext3的文件系統的磁碟狀態
$ df -x ext3 僅顯示文件類型不為ext3的文件系統的磁碟狀態
$ df -T 除顯示文件系統磁碟容量大小外還顯示文件系統類型
$ df -l 僅顯示本地文件系統。
7. fdisk----分區表查詢工具
fdisk [options][driver]
$ fdisk -l 列出所有分區信息
8. hdparm----硬碟管理
hdparm [options][driver]
$ hdparm -d /dev/hda 顯示硬碟的DMA模式是不打開,1代表on
$ hdparm -tT /dev/hda 測試硬碟的寫性能
$ hdparm -d1 /dev/hda 開啟dma功能
$ hdparm -d1 -X68 -c3 -m16 /dev/hda
選項說明:
-c3:把硬碟的IO模式從16位轉成32位。
-m16:改變硬碟的多路扇區的讀功能,-m16使硬碟在一次I/O中斷中讀入16個扇區的數據。
-d1:打開DMA模式。
-X68:支持ATA66的數據傳輸模式。下面是其它模式的設置對照
ATA33.......參數是-X66
ATA66.......參數是-X68
ATA100......參數是-X69
$ hdparm -k1 /dev/hda 保存設置
9. ln-----為文件建立別名
ln [options] sourcename [destname]
ln [options] sourcenames destdirectory
$ ln -s file1 file2 建立一個到file1的符號鏈接file2,刪除file2不會影響file1
$ ln -s -f file1 file2 建立一個到file1的符號鏈接file2,並不提示是否重寫
10. shutdown-----終止所有進程序,關閉計算機。
shutdown [options] when [message]
用when可以是指定的關機時間(以hh:mm格式)、關機前要等待的時間(以+m格式)、或者now。message指定一條廣播消息通知所有用戶退出系統。showdown給所有進程發送SIGTERM信號,並調用init 1執行實際的關機動作。
$ shutdown -c 取消正在進行的關閉操作
$ shutdown -f 快速重新啟動,在重新啟動時禁止對fsck的常規調用
$ shutdown -h 當關閉完成時停止系統
$ shutdown -k 輸出警告信息,但禁止實際的關閉
$ shutdown -n 不調用init就執行關閉
$ shutdown -r 當關閉完成時重新啟動系統
$ shutdown -t 5 在殺死進程和改變運行級別之間確保延時5秒
11. sleep-----執行另一個命令之前等待的時間
sleep amount [units]
units默認為秒(s),m表示分鍾,h表示小時,d表示天。
12. swapon/swapoff-----啟動和關閉交換分區
swapon/swapoff [options] device
$ swapon -s 顯示交換分區信息
$ swapon -a 激活所有在/etc/fstab中有sw標記的分區
$ swapon -p 1 設置交換分區優先順序為1
13. tune2fs-----調整Linux第二擴展文件系統的參數
tune2fs [options] device
$ tune2fs -l /dev/hda1 顯示hda1分區的超級塊內容
$ tune2fs -c 100 /dev/hda1 設置hda1分區每mount100次就進行磁碟檢查
14. uniq----過濾、統計、刪除重復行
uniq [options][file1 [files]]
$ uniq -c file file中的重復行輸出一次,並在每行前顯示重復次數
$ uniq -d file file中的重復行輸出一次,但不輸出唯一的行
$ uniq -u file 只輸出file中的唯一行
$ uniq file1 file2 把file1中的重復的相鄰行刪除,並把每行的一個拷貝送到file2
15. wc-----輸出每個文件中的字元數、單詞數及行數。
wc [options][files]
$ wc -l file 輸出file中的行數
$ wc -w file 輸出file中的單詞數
$ wc -c file 輸出file中的字元數
③ Linux下C語言:如何遍歷制定目錄及其子目錄下所有文件的文件名並將其按照最後修改時間排序呢
linux中有相關的API函數,可以讀取目錄中所有的文件名字,以及時間屬性信息,你把這些信息讀出來,利用各種排序演算法排序就可以了
④ 如何在linux中使用shell腳本遍歷指定目錄的文件,將創建時間大於指定時間的文件,復制到指定目錄下。
創建一個腳本judgetime,內容如下:
ls -l $*|awk '{split($8,hour,":");if((hour[1]>23 || hour[1] < 1)&&hour[1]<24)print}'
到要查找的目錄下,運行
find ./ -name "*" -exec judgetime {} \;
注意內時間格式為24小時制容。
⑤ linux shell 遍歷文件夾 並將結果保存 到變數
#!/bin/bash
(($#<1))&&echo"paramiszero!"&&exit1
[!-d$1]&&echo"$1notpath"&&exit1
dir=$1
dir_p="$dirDirectory:"
cd$dir
dir=`pwd`
foriin`ls$dir`
do
if[-d$i];then
/tmp/sh/dir_file$i#我的腳本文件在/tmp/sh中,需要改一下這里
else
dir_p="$dir_pFile$i"
fi
done
cd..
echo$dir_p
實驗結果:
[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
這樣應該可版以吧,試試看權
⑥ linux下C語言怎麼統計某個目錄下的文件個數
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <errno.h>
#include <string.h>
#define MAX 1024
int get_file_count(char *root)
{
DIR *dir;
struct dirent * ptr;
int total = 0;
char path[MAX];
dir = opendir(root); /* 打開目錄*/
if(dir == NULL)
{
perror("fail to open dir");
exit(1);
}
errno = 0;
while((ptr = readdir(dir)) != NULL)
{
//順序讀取每一個目錄項;
//跳過「..」和「.」兩個目錄
if(strcmp(ptr->d_name,".") == 0 || strcmp(ptr->d_name,"..") == 0)
{
continue;
}
//printf("%s%s/n",root,ptr->d_name);
//如果是目錄,則遞歸調用 get_file_count函數
if(ptr->d_type == DT_DIR)
{
sprintf(path,"%s%s/",root,ptr->d_name);
//printf("%s/n",path);
total += get_file_count(path);
}
if(ptr->d_type == DT_REG)
{
total++;
printf("%s%s/n",root,ptr->d_name);
}
}
if(errno != 0)
{
printf("fail to read dir"); //失敗則輸出提示信息
exit(1);
}
closedir(dir);
return total;
}
int main(int argc, char * argv[])
{
int total;
if(argc != 2)
{
printf("wrong usage/n");
exit(1);
}
total = get_file_count(argv[1]);
printf("%s ha %d files/n",argv[1],total);
return 0;
}
⑦ linux平台:使用lua語言遍歷某一文件夾下所有文件
你可以參考如下實例代碼:
functiongetFile(file_name)
localf=assert(io.open(file_name,'r'))
localstring=f:read("*all")
f:close()
returnstring
endfunctionwriteFile(file_name,string)
localf=assert(io.open(file_name,'w'))
f:write(string)
f:close()
end--從命令行獲取參數,如果有參數則遍歷指定目錄,沒有參數遍歷當前目錄ifarg[1]~=nilthen
cmd="ls"..arg[1]
else
cmd="ls"endprint("cmd",cmd)
--io.popen返回的是一個FILE,跟c裡面的popen一樣locals=io.popen(cmd)
localfileLists=s:read("*all")
print(fileLists)
whiletruedo--從文件列表裡一行一行的獲取文件名_,end_pos,line=string.find(fileLists,"([^ ]+.txt)",start_pos)
ifnotend_posthenbreakend--print("wld",line)localstr=getFile(line)
--把每一行的末尾1,替換為0,localnew=string.gsub(str,"1, ","0, ");
--替換後的字元串寫入到文件。以前的內容會清空writeFile(line,new)
start_pos=end_pos+1end
⑧ linux下遍歷讀取所有子目錄里的特定文件,並改名復制到別的目錄
find . -name a.txt -exec mv {} b.txt \; 其中find後面的"."表示從當前目錄開始查找(含子目錄),注意最後的「\;"是需要的。
⑨ linux shell中的遍歷目錄並刪除目錄下與目錄名相同的文件
先設定實驗環境:
#
造
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
#
檢驗測試環境:
$
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/
#
利用下列腳本來實現你要做的:
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裡面去,為了避免已經有同樣的檔案名稱在/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
#
屏幕執行輸出如下:
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/
#
復驗實驗環境:
$
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!