Chinaunix首页 | 论坛 | 博客
  • 博客访问: 499032
  • 博文数量: 401
  • 博客积分: 244
  • 博客等级: 入伍新兵
  • 技术积分: 2215
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-04 10:02
文章分类

全部博文(401)

文章存档

2013年(37)

2012年(364)

分类:

2012-08-13 11:41:53

原文地址:常用shell脚本 作者:

1、将当前目录下的所有.c文件改成.d文件

  1. #!/bin/bash
  2. for filename in *
  3. do
  4.     if [ ${filename##*.} = "c" ]
  5.     then
  6.         mv $filename ${filename%%.*}.d
  7.     fi
  8. done

2、去除文件名中的空格


在Linux文件系统中,一般来说我们可以用以下方法来遍历某个目录下的文件。
for filename in $(ls *);
do
    echo ${filename}
done
但是,由于for语句是按照单词为单位(即空格)进行分割的,因此,当文件名称中有空格的时候,就会出现一个文件名被分成两个或者多个文件来读的情况。比如,当前目录下有下面几个文件:
a.txt b.txt “c .txt”
上面的脚本执行的结果就变成
a.txt
b.txt
c
.txt
了。
遇到这种情况怎么办?其实我们我可以用while语句加上read命令来轻松实现。
ls * | while read filename;
do
    echo ${filename}
done
即先把每个文件的名称读取到变量file中,然后再输出到屏幕上。
实现了遍历文件名带有空格的文件之后,我们所要做的就是修改文件名,除去文件名中的空格。用tr命令来实现。
echo ${old_file_name} | tr -d ‘ ‘
将该结果保存到变量new_file_name中,再用mv命令来重命名文件。
mv “${old_file_name}” ${new_file_name}
注:由于文件名中可能有空格,所以必须用引号将文件名引起来。
整个脚本如下:

点击(此处)折叠或打开

  1. ls * | while read filename;
  2. do
  3.   old_file_name=${filename}
  4.   new_file_name=`echo ${old_file_name} | tr -d ' '`
  5.   mv "${old_file_name}" "${new_file_name}"
  6. done

3、批量改名

点击(此处)折叠或打开

  1. for filename in *eee*
  2. do
  3.   newname=`echo $filename|sed -n ’s/eee/EEE/p’`
  4.   mv $filename $newname
  5. done

4、一个简单的watch

点击(此处)折叠或打开

  1. #!/bin/bash

  2. while [ 1 ] ; do
  3.   clear
  4.   echo "Command: $*"
  5.   date
  6.   echo ""
  7.   ( $* )
  8.   sleep 2
  9. done

5. awk批量改名

点击(此处)折叠或打开

  1. #!/usr/bin/env bash
  2. #! /bin/sh
  3. ls *.c | awk -F_ '{printf "mv %s %s;",$0,$1}' | sh



阅读(277) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~