
#
造
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!
因为为了让程序变得准确可行。1、chdir("..")是为了在递归完某一子目录后,退回到其父目录继续遍历后续的普通文件或其他子目录;如果缺少这一语句,那么while循环中的递归printdir将会把父目录中后续的普通文件当作目录来 *** 作,从而造成“无法打开目录”这种错误。
2、chdir(dir)是为了在程序刚运行时进入指定的目录,以及接下来递归时进入相应子目录;
用`pwd`提取的绝对路径。
[gag@genomic-server tmp]$ more test1
#!/usr/bin/perl -w
# script name is test
use strict
my $d="/home/gag"
my $now=`pwd`
print $now,"\n"
chdir $d
print `pwd`print `ls`
`touch iamhere`
print "#######################\n"
chdir $nowprint `pwd`
`touch iamherethen`
[gag@genomic-server tmp]$ perl test1
/home/gag/perl/tmp
/home/gag
c
cpp1
cpp2
java
perl
shell
tools
#######################
/home/gag
[gag@genomic-server tmp]$ ls
test1
[gag@genomic-server tmp]$ ls ../../
c cpp1 cpp2 iamhere iamherethen java perl shell tools
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)