Linux创建以当前日期命名的文件夹
今天不知道是做了一件好事还是泄漏了技术秘密,在邮件里告诉别人怎么在Linux下创建以当前日期命名的文件夹的方法。
索性发到网上,全民共享,呵呵
date '+%Y%m%d' |read a
mkdir $a
OK,这就行了!
另注:有朋友说这样实现不了,我觉得原因可能是需要在前面加一句:#! /bin/ksh
(这样可以将shell设置为ksh)
或者还有一种方式实现:
time=$(date '+%Y%m%d' )
mkdir $time
如何获得脚本文件所在路径
举个例子:
在/home/john/tmp下建立脚本文件test.sh
1 #!/bin/bash
2
3 echo "The script is in ${PWD}"
在/home/john下执行它,得到输出为:The script is in /home/john
显然我们想要的是/home/john/tmp
我的解决办法:
1 #!/bin/bash
2
3 ROOT_PATH=`dirname ${PWD}/$0`
4
5 echo $ROOT_PATH
无论在什么路径执行这个脚本都可以得到正确的输出了:The script is in /home/john/tmp
shell命令-拷贝文件
shell脚本名shell.sh
代码:
#!/bin/sh
if [ $# -eq 0 ]
then
route='./'
fi
echo $route
if [ ! -e $route ]
then
exit
fi
if [ ! -d $HOME/test1 ]
then
mkdir $HOME/test1
fi
cd $route
for file in `ls`
do
if [ -d $file ]
then
cp -rf $file $HOME/test1
else
cp $file $HOME/test1
fi
done
代码实现功能:
把当前目录下的所有文件(包括文件夹)拷贝到$HOME/test1目录下
代码分析:
#!bin/sh 这是shell 脚本必须有的
首先这个代码要放在要被拷贝的目录下执行
if [ $# -eq 0 ]
then
route='./'
fi #if判断结束标志
$#意思是参数的个数
-eq 意思等于
第一句就是判断执行./shell.sh时是否有加入参数(如./shell.sh 参数),没有参数把当前目录的符号'./'赋给route
echo $route #输出route内容
if [ ! -d $HOME/test1 ]
then
mkdir $HOME/test1
fi
$HOME 可以通过在命令行输入echo $HOME进行查看 我输入的结果是/home/skygod 我的用户名是skygod
(-d $HOME/test1) 是指该test1文件名是文件夹或文件夹存在,在前面加!是指该文件名不是文件夹或文件夹不存在,不存在,就重新在$HOME路径下(即/home/skygod)创建这个test1文件夹.
cd $route
就是cd ./ 就是进入到当前目录下
for file in `ls`
do #for循环开始标志
if [ -d $file ]
then
cp -rf $file $HOME/test1
else
cp $file $HOME/test1
fi #if结束标志
done #for 循环结束标志
for 循环遍历范围是 in后面的 `ls` (强调ls旁边的不是引号而是!号左边的点)
`ls` 就是遍历判断该目录下所有文件
if [ -d $file ]
-d $file 是判断该文件是不是文件夹
如果是 就要以拷贝文件夹的命令拷贝 拷贝文件夹要在cp 后面加-rf
如果不是 就用cp就可以了
拷贝命令 cp -参数 拷贝内容 拷贝目的
今天不知道是做了一件好事还是泄漏了技术秘密,在邮件里告诉别人怎么在Linux下创建以当前日期命名的文件夹的方法。
索性发到网上,全民共享,呵呵
date '+%Y%m%d' |read a
mkdir $a
OK,这就行了!
另注:有朋友说这样实现不了,我觉得原因可能是需要在前面加一句:#! /bin/ksh
(这样可以将shell设置为ksh)
或者还有一种方式实现:
time=$(date '+%Y%m%d' )
mkdir $time
如何获得脚本文件所在路径
举个例子:
在/home/john/tmp下建立脚本文件test.sh
1 #!/bin/bash
2
3 echo "The script is in ${PWD}"
在/home/john下执行它,得到输出为:The script is in /home/john
显然我们想要的是/home/john/tmp
我的解决办法:
1 #!/bin/bash
2
3 ROOT_PATH=`dirname ${PWD}/$0`
4
5 echo $ROOT_PATH
无论在什么路径执行这个脚本都可以得到正确的输出了:The script is in /home/john/tmp
shell命令-拷贝文件
shell脚本名shell.sh
代码:
#!/bin/sh
if [ $# -eq 0 ]
then
route='./'
fi
echo $route
if [ ! -e $route ]
then
exit
fi
if [ ! -d $HOME/test1 ]
then
mkdir $HOME/test1
fi
cd $route
for file in `ls`
do
if [ -d $file ]
then
cp -rf $file $HOME/test1
else
cp $file $HOME/test1
fi
done
代码实现功能:
把当前目录下的所有文件(包括文件夹)拷贝到$HOME/test1目录下
代码分析:
#!bin/sh 这是shell 脚本必须有的
首先这个代码要放在要被拷贝的目录下执行
if [ $# -eq 0 ]
then
route='./'
fi #if判断结束标志
$#意思是参数的个数
-eq 意思等于
第一句就是判断执行./shell.sh时是否有加入参数(如./shell.sh 参数),没有参数把当前目录的符号'./'赋给route
echo $route #输出route内容
if [ ! -d $HOME/test1 ]
then
mkdir $HOME/test1
fi
$HOME 可以通过在命令行输入echo $HOME进行查看 我输入的结果是/home/skygod 我的用户名是skygod
(-d $HOME/test1) 是指该test1文件名是文件夹或文件夹存在,在前面加!是指该文件名不是文件夹或文件夹不存在,不存在,就重新在$HOME路径下(即/home/skygod)创建这个test1文件夹.
cd $route
就是cd ./ 就是进入到当前目录下
for file in `ls`
do #for循环开始标志
if [ -d $file ]
then
cp -rf $file $HOME/test1
else
cp $file $HOME/test1
fi #if结束标志
done #for 循环结束标志
for 循环遍历范围是 in后面的 `ls` (强调ls旁边的不是引号而是!号左边的点)
`ls` 就是遍历判断该目录下所有文件
if [ -d $file ]
-d $file 是判断该文件是不是文件夹
如果是 就要以拷贝文件夹的命令拷贝 拷贝文件夹要在cp 后面加-rf
如果不是 就用cp就可以了
拷贝命令 cp -参数 拷贝内容 拷贝目的