先設(shè)定實驗環(huán)境:

成都創(chuàng)新互聯(lián)長期為1000多家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為雙塔企業(yè)提供專業(yè)的網(wǎng)站設(shè)計制作、網(wǎng)站制作,雙塔網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
# 造 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!
為了避免目錄列舉消耗時間過長,請指定一個目錄來模擬,命令行參數(shù):代表路徑的字符串.
如果認(rèn)可代碼,請加分50,謝謝
----
import javax.swing.*;
import javax.swing.tree.*;
import java.awt.*;
import java.io.*;
final public class FileTree extends JFrame {
public FileTree(File dir) throws HeadlessException {
super("File Tree");
JTree tree;
add(new JScrollPane(tree =new JTree(buildTreeModel(dir))));
tree.setCellRenderer(new FileTreeRenderer());
setSize(400,600);
setVisible(true);
}
private TreeModel buildTreeModel(File dir){
DefaultMutableTreeNode root = new DefaultMutableTreeNode(dir);
walkthrough(dir,root);
return new DefaultTreeModel(root);
}
private static void walkthrough(File f,DefaultMutableTreeNode node){
for (File fle : f.listFiles()) {
DefaultMutableTreeNode n = new DefaultMutableTreeNode(fle);
node.add(n);
if (fle.isDirectory()){
walkthrough(fle, n);
}
}
}
private class FileTreeRenderer extends DefaultTreeCellRenderer {
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
JLabel cmp = (JLabel)super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
if (value instanceof DefaultMutableTreeNode) {
DefaultMutableTreeNode n = (DefaultMutableTreeNode)value;
Object obj = n.getUserObject();
if (obj instanceof File) {
File f = (File)obj;
cmp.setText(f.getName());
cmp.setForeground(f.isDirectory()?Color.BLUE:Color.BLACK);
}
}
return cmp;
}
}
public static void main(String[] args) {
new FileTree(new File(args[0]));
}
}
摘要: Linux , Shell
Shell中常用循環(huán)有 for , while
for循環(huán)只能用于 固定次數(shù) 的循環(huán),因此不能無限循環(huán)和用于一些在后臺守護進程一直運行的程序,語法語句如下
也可以寫成一行,用 ; 分隔
取值列表內(nèi)元素以空格隔開,如果元素帶有空格則用引號包裹起來,例子如下
輸出如下,可見循環(huán)到最后退出循環(huán),引用變量依舊是最后一個取值列表元素
一行的寫法
Shell的for循環(huán)也可以采用C語言的寫法,注意是 雙括號 ,用 分號; 間隔
一個簡單例子
while循環(huán)語句結(jié)合條件測試使用,語法如下
舉一個例子
在循環(huán)中使用條件測試實現(xiàn)復(fù)雜的邏輯,例如
也可以使用,||一行完成,省去if,fi
Shell的continue,break語句和Python一樣,例子如下
break語句下輸出4
continue語句下輸出4 6 7 8 9 10
常見結(jié)合使用的循環(huán)體有 序列 , 數(shù)組 , 命令行傳參 , 文件目錄和文件
序列通過 seq 命令或者 {begin..end..step} 符號進行定義:
結(jié)合for循環(huán)使用案例
在Shell中使用小括號 () 定義數(shù)組,數(shù)組遍歷使用 [@] 符號,防止元素有空格用雙引號包起來,,例子如下
命令行傳參遍歷使用固定符號 $@ ,如果參數(shù)中有空格,用雙引號括起來,例子如下
文件遍歷使用 ls 命令,可以指定目錄,以及通配符匹配
一個雙重循環(huán)實現(xiàn),注意 expr表達式中乘號要加轉(zhuǎn)移符
(2)將某目錄下大小大于閾值的文件移動到另一個文件
遍歷循環(huán)一個目錄,使用awk語法獲得文件大小,將100m以上的文件移動到另一個文件夾
(2)指定開始日期和結(jié)束日期完成一個跑批任務(wù)
指定一個開始時間和結(jié)束時間,while從開始日期一直自增到結(jié)束日期循環(huán)結(jié)束,通過 date -d '2021-01-01 1day' +%Y-%m-%d 自增一天
先設(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
-rw-r--r--
1
wenlee
comm
dec
22
10:35
1.txt
-rw-r--r--
1
wenlee
comm
dec
22
10:35
2.txt
-rw-r--r--
1
wenlee
comm
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
dec
22
10:35
d1/1.txt
-rw-r--r--
1
wenlee
comm
dec
22
10:35
d2/1.txt
-rw-r--r--
1
wenlee
comm
dec
22
10:35
d3/1.txt
-rw-r--r--
1
wenlee
comm
dec
22
10:35
d4/1.txt
-rw-r--r--
1
wenlee
comm
dec
22
10:35
d5/1.txt
ok?
thanks!
網(wǎng)頁題目:linux遍歷目錄命令 linux shell遍歷目錄
標(biāo)題URL:http://chinadenli.net/article4/hhgpoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、手機網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)