2013-09-29 shell练习题

回复 收藏
改名.jpg

如图,在你的/root 目录下有如下文件,请写一脚本批量把这些文件都还原,也就是把.bak的后缀都去掉。
改名.jpg
2013-09-29 09:32 举报
已邀请:
0

地平线

赞同来自:

rename .bak.bak '' *
0

Hello_Lemon

赞同来自:

#!/bin/bash

for i in `ls|grep '.bak.bak$'`;do
        mv $i `ls $i|awk -F '.' 'NF-=1' OFS='.'`
done
0

乐宝儿

赞同来自:

grep ".bak" 1.txt |sed 's/.bak//g'
0

zhangxiaobo

赞同来自:

#!/bin/bash

for file in `ls /root /*.bak`
do
    newfile=${file//.bak}
    mv $file $newfile
done
0

___紸角__...

赞同来自:

!#/bin/bash
#
#
for filename in `ls`
do
        filename_new=`echo $filename | sed 's/.bak//g'`
        mv $filename $filename_new

done

echo "complete!"
0

hkj8808

赞同来自:

#!/bin/bash
for i in `ls *.bak.bak`;do
  mv `echo $i|sed '1,$s/\.bak\.bak//g'`
done
0

泡沫。

赞同来自:

怎么做啊
0

不断更新

赞同来自:

rename .bak.bak '' *
0

ocean

赞同来自:

本帖最后由 ocean 于 2014-5-5 15:28 编辑

#!/bin/bash
#
#批量把这些文件都还原,也就是把.bak的后缀都去掉。
#
for i in `ls /root/*.bak`
do
newname=`echo test.bak.bak |sed -n 's/.bak.bak//p'`
#  mv $i ${i%.*}
   mv $i $newname
done
0

Budweiser小王子

赞同来自:

练习
0

luzhen521

赞同来自:

0

楓瀛夢鞢

赞同来自:

#! /bin/bash
cd /root
for i in `ls|grep 'bak'`;do
a=`echo $i|awk -F'.bak' '{print $0}'`
b=`echo $i|awk -F'.bak' '{print $1}'`
mv $a $b
done
0

lidunhuai

赞同来自:

1、for f in '*.bak'; do rename .bak.bak '' $f; done
2、find -name '*.bak'|xargs rename .bak.bak ''
0

zyfeifie

赞同来自:

#!/bin/bash
cd /root
for i in `ls *bak`
do
newfile=`echo $i | sed 's/\.bak//g' `
mv $i $newfile
done
0

Louis

赞同来自:


#!/bin/bash
## This script is for change file name back.
## Writed by Louis on 2014/08/29 17:30

for f1 in `ls .`; do
    n=`echo $f1|grep '.bak'`
    if [ ! -z $n ];then
        f2=`echo $f1|cut -d. -f1,2`
        mv $f1 $f2
    fi
done
0

游夜

赞同来自:

#!/bin/bash
cd /root
for n in `ls *.bak.bak`;do
        mv $n `ls $n|sed 's/\(.*\).bak.bak/\1/g'`
done
0

寒一

赞同来自:

#! /bin/bash

ls -l test > test.txt   # 我是把.bak文件放在/tmp/test目录下进行操作
awk '{print $9}' test.txt |grep -v '^$' |sed 's/.bak//g'
0

wyatt88

赞同来自:

#!/bin/bash
for file in `ls /root/baktest/`
do
if [ -f $file ]
then
name=`ls $file|grep bak`
echo $name
if [ ! -z $name ]
then
newname=`ls $file| sed 's/\.bak//g'`
mv $file $newname
fi
fi
done
0

So Long

赞同来自:

本帖最后由 程城 于 2014-9-9 23:42 编辑

#!/bin/bash

for i in `find /chengcheng/*.bak -type f`;do
     b=`echo $i | awk -F '.' '{print $1}'`
     mv $i $b
done
或者改为.txt文件
#!/bin/bash
for i in `find /chengcheng/*.bak -type f`;do
b=`echo $i | awk -F '.' '{print $1}'`
mv $i $b.txt
done


0

nihao426181

赞同来自:

^^^^^^^^^^^^^^^^^^
0

nihao426181

赞同来自:

………………………………………………雷哥,果然雷。出的题都是精典型的
0

huifeidexiaxia

赞同来自:

直接把.BAK替换成空可以不?
0

王靖

赞同来自:

#! /bin/bash

for filename in `ls | grep '.bak\>$'` ;do
file=`echo "$filename" |sed 's/.bak\>$//'`
   mv $filename $file
done
~                                                                                             
~                                                                                             
~               
0

王肖强

赞同来自:

  1. #!/bin/bash
  2. # This is a batch delete file name suffix scripts.
  3. # Writen by Wangxiaoqiang 2014-11-24.

  4. DIR=~
  5. FILE=$(cd ${DIR} ; ls *.bak)
  6. for i in ${FILE}
  7.   do
  8.     KEY=`echo ${i} | awk -F . '{NF-=2 ; OFS="." ; print $0}'`
  9.     mv ${i} ${KEY}
  10. done
  11.   ls ${DIR}

  12. # End
0

aqi

赞同来自:

for i in `ls /root/ | grep ".bak"`;do newname="`echo $i | sed -n 's/\.bak//gp'`";mv $i $newname;done
0

阳光

赞同来自:

#!/bin/bash
#author:GY
#Date:2014-12-3


dir=/root
for i in `ls $dir |grep '.bak'`;  do

    mv $i `echo $i | awk -F '.bak' '{print $1}'`
done
0

川娃子在大连

赞同来自:

#!/bin/bash
# -------------------------------------------------------------------------------
# Filename:    amingtest5.sh
# Revision:    1.0
# Date:        2014/12/17
# Author:      FUQIANG LI
# Email:       317377106@qq.com
# Notes:       aminglinux shell exercises of 2013-09-29
# -------------------------------------------------------------------------------
for file in `find -type f -name "*.bak.bak"|awk -F / '{print $2}'`
do
        mv $file `echo $file |sed -r 's/.bak.bak//g'`
done
0

Mё飘逸d檒

赞同来自:

好办,真难啊
0

赵海龙

赞同来自:

#! /bin/bash
     # 批量去除文件的扩展名
     filepath=/tmp/
     for file in `find $filepath -name "*_bak"`
     do
             mv $file ${file%.*}
     done
${file%.*}是bash中字符处理“掐头去尾法”的去尾法。





0

2422606568

赞同来自:

学习
0

寻@轨迹

赞同来自:

本帖最后由 寻@轨迹 于 2015-2-6 17:56 编辑

#! /bin/bash
# Written by yuhui
cd /root/bak
for sf in `ls`;
do
re=`ls $sf | tr '.bak' ' '`
mv $sf $re
done

0

cmzsteven

赞同来自:

#/bin/bash

for file in *; do
    nf=`ls $file |awk -F '.' '{print NF}'`
    first_nf=`ls $file |awk -F '.' '{print $1}'`
    second_nf=`ls $file |awk -F '.' '{print $2}'`
    filename=`ls $file |awk -F '.' '{print $1"."$2}'`
    if (($nf==1)); then
        continue
    else
        if [ "$second_nf" == "bak" ]; then
            mv $file $first_nf
        else
            mv $file $filename
        fi
    fi
done
0

wuhen

赞同来自:

本帖最后由 wuhen 于 2015-2-17 21:45 编辑

find /root -type f -name "*.bak.bak"|sed 's/\.bak\.bak/\.bak/g' 变成*.bak

find /root -type f -name "*.bak.bak"|sed 's/\.bak.bak//g'      变成文件没有bak
0

qq20847697

赞同来自:

#!/bin/bash
#
filename=`ls /root | grep '.bak'`
for i in $filename ; do
  newfilename=`ls $i | sed 's/.bak//g'`
  mv $i $newfilename
done
0

qq20847697

赞同来自:

希望脚本练习题下面有参考答案
0

hehong

赞同来自:

不会,看下
0

wangdi244

赞同来自:

ls -l | grep -v total|awk '{print $9}'|sed 's#.bak.bak#.bak#'
0

pykihwfn

赞同来自:

以下脚本实现把/emma目录下所有文件加上.bak

#!/bin/bash
#writen by alex on 2014.11.19 about add".bak"
cd /emma
for i in `ls`;do                   #列出/test 目录下的所有文件
        mv $i $i.bak               #在文件名的后面加上.bak
        done

以下脚本实现把/emma目录下所有文件名后的.bak 去掉

#!/bin/bash
#writen by alex.zhu on 2014.11.19 about "delete .bak"
cd /emma
for i in `ls`;do
        mv $i `echo $i |sed 's#.bak##' `       #mv 为重命名命令,  sed 's#.bak##'   为替换命令。把每次循环得到得文件名(如a.bak) 后面的.bak 替换为空  。所以就实>现了 把文件名后面的.bak去掉的目的。
        done
0

soo

赞同来自:

  1. fis=`ls |grep ".bak"`
  2. for f in $fis
  3. do
  4.     name=`echo $f |sed 's/.bak//g'`
  5.     mv $f $name
  6. done
0

adong

赞同来自:

#!/bin/bash
# delete bank

for file in `find . -name "*.bank"`
        do
                mv $file ${file%.*}
done

for file in `find . -name "*.bank"`
        do
                mv $file ${file%.*}
done

0

adong

赞同来自:

#!/bin/bash
# delete bank

for file in `find . -name "*.bank"`
        do
                mv $file ${file%.*}
done
for file in `find . -name "*.bank"`
        do
                mv $file ${file%.*}
done
0

qin521ne

赞同来自:

答案
0

鑫柏

赞同来自:

???
0

翟厚翔

赞同来自:

for f1 in `find . -type f`; do echo $f1;f2=`echo $f1|sed -r 's/.bak.bak//g'`; mv $f1 $f2; done
0

liang1990

赞同来自:

find /root/ -type f -name "*.bak" |while read file do   mv $file  ${file%.bak} done
0

shajoe

赞同来自:

想不出来。。
for file in *.bak
do
mv $file ${file%.*}
done
循环不起来,只能多次运行
0

qqq998492

赞同来自:

#! /bin/bash
for n in `ls /root` ;do
echo $n |sed 's/.bak//g' |xargs -n1 -i{} mv -f $n {}
done
0

汤小东

赞同来自:

check
0

J!_yuan

赞同来自:

学习
0

J!_yuan

赞同来自:

为什么没有答案??
0

J!_yuan

赞同来自:

看看
0

J!_yuan

赞同来自:

看一下
0

剑在飞

赞同来自:

  1. #!/bin/bash
  2. for  i   in  `ls  /root/*`
  3.    do
  4.   rename=`echo $i|cut -d '.' -f1`
  5.   /bin/mv $i  $rename
  6. done
0

ヾSun

赞同来自:

本帖最后由 ヾSun 于 2015-12-20 19:26 编辑
  1. #!bin/bash
  2. for f  in $(find ./ -name "*.bak"|sed 's/.bak/ /g')
  3. do
  4.     mv ${f}.bak ${f}
  5. done

0

wanjj

赞同来自:

0

蓝色风暴

赞同来自:

看看
0

蓝色风暴

赞同来自:

#!/bin/bash

ls -l | awk '{print $9}' | grep -v '^$' | grep '_bak$' > /tmp/1.txt

for i in `cat /tmp/1.txt`
        do
                b=`grep "$i" /tmp/1.txt | sed "/$i/s/_bak$//"`
                mv $i $b
        done
rm -rf /tmp/1.txt
0

我是学渣

赞同来自:

find ./ -name '*.bak'|xargs rename ".bak" ""
0

hlymlv

赞同来自:

for i in `ls`;do mv $i `echo $i|sed 's/.bak//g'`;done
0

rolay8

赞同来自:


  1. #!/bin/bash

  2. find /root -type f -iname "*.bak"|while read line
  3. do
  4.         newname=`echo -n $line|sed 's/.bak//g'`
  5.         mv $line $newname
  6. done
0

googleqicq

赞同来自:

xuexi xia
0

loveyouhyf

赞同来自:

#!/bin/bash
##在你的/root目录下有.bak文件,批量把这些文件都还原,也就是把.bak的后缀都去掉。##write by 2016-01-12
for i in `ls *.bak`;do
a=${i%%.*}
#echo $a
mv $i $a
done
0

lyhabc

赞同来自:

好难  
0

lyhabc

赞同来自:

如图,在你的/root 目录下有如下文件,请写一脚本批量把这些文件都还原,也就是把.bak的后缀都去掉。


#!/bin/bash
#find /root/ -name "*.bak.bak" -type f > /tmp/1.txt
#sed -i.bak -r "s/.bak.bak//g" /tmp/1.txt

nn=$(cat /tmp/1.txt|sed -n ""p|wc -l)
for i in $(seq 1  $nn)
do
        if [ "$(sed -n "$i"p  /tmp/1.txt.bak)" == "$(sed -n "$i"p  /tmp/1.txt).bak.bak" ]
        then
                cat  $(sed -n "$i"p  /tmp/1.txt.bak) >  $(sed -n "$i"p  /tmp/1.txt)
        fi
done
0

gxp2008

赞同来自:

本帖最后由 gxp2008 于 2016-3-1 22:26 编辑
  1. #!/bin/bash
  2.   4
  3.   5 while :
  4.   6 do
  5.   7      a=`ls |sed 's/.bak//' |awk '/.bak/'`
  6.   8      if [-z "$a"]
  7.   9      then
  8. 10          exit
  9. 11      else
  10. 12          echo $a
  11. 13      fi
  12. 14 done
0

xy751625718

赞同来自:

#!/bin/bash
for f in $(ls|sed 's/.bak.bak//g')
do
        mv ${f}.bak.bak ${f}
done
0

gxp2008

赞同来自:

  1. for i in $(ls .)
  2. do
  3.    mv $i $(echo $i|sed 's/\.bak//')
  4. done


之前的,发现给for循环,传不进参数。没法删除bak后缀。使用rename,只能替换文件名,删除后缀,使用perl正则无效。百思不得其解,网上搜到了这个,这个还是比较有效的
0

sy0258

赞同来自:

学习
0

陈洪良

赞同来自:

学习中!
0

linle

赞同来自:

看答案
0

wangzai

赞同来自:

学习
0

branttsai

赞同来自:

study,tks
0

a_leon

赞同来自:

  1. #!/bin/bash
  2. dir=/root/lianxi
  3. for file in $dir/*
  4. do
  5.    newFile=$(echo $file|sed 's/\(.bak\)\+//')
  6.    echo $newFile

  7.    mv $file $newFile
  8. done
0

chumingjie

赞同来自:

学习
0

stone

赞同来自:

for i in `ls /root/*.bak`; do mv -f $i `echo $i|sed 's/.bak//g'`; done
0

luckytodd

赞同来自:

find /root -name "*.bak.bak" -type f|sed 's/.bak.bak$//g'|xargs -i mv {}.bak.bak {}
0

luckytodd

赞同来自:

find . -type f -name "*.bak.bak" |sed  's/.bak.bak$//g'|xargs -i mv {}.bak.bak {}
0

luckytodd

赞同来自:

find /root -type f -name "*.bak.bak" |sed 's/.bak.bak$//g' |xargs -i mv {}.bak.bak {}
0

Toornix

赞同来自:

看下答案,没有思路
0

loveangeler

赞同来自:

#!/bin/bash
for i in `ls *.bak`
do
        mv $i $(echo $i|sed 's/\.bak//g')
done
0

liqian

赞同来自:

学习
0

cj2017

赞同来自:

#/bin/bash
#批量改后缀(去掉.bak)
for i in `ls /root | grep .bak.bak$ |sed 's/.bak.bak//g'`
do
  mv /root/$i.bak.bak /root/$i
done
0

dongdongchen

赞同来自:

继续学习
0

dongdongchen

赞同来自:

  1. for   files  in  `ls  *.bak`
  2. do
  3.     mv  $files  `echo $files |sed 's/\.bak//g' `
  4. done
0

kevinjin

赞同来自:

求解答
0

a_leon

赞同来自:

#!/bin/bash
  dir=/root
for file in $dir/*;do
        echo $file
        newFile=$(echo $file |sed 's/\(.bak\)\+/ /')
        mv $file  $newFile

done
0

xebszw

赞同来自:

本帖最后由 xebszw 于 2016-8-18 20:13 编辑

dir=/root/
ext=".bak.bak"

cd $dir
for file in $(ls $dir |grep $ext);do         
           name=$(ls $file |cut -d. -f1)         
           mv $file $name                  
done
0

linuxcp

赞同来自:

re
0

hegeng

赞同来自:

学习

0

凌乱

赞同来自:

#!/bin/bash
#在你的/root目录下有.bak.bak后缀名文件,请写一脚本批量把这些文件都还原,也就是把.bak的后缀都
去掉。
for file in `ls /root/aa/*.bak`;do
    b=`ls $file |sed 's/.bak//g'`
    mv $file $b
done

0

kw是id

赞同来自:

#!/bin/bash
a=`ls /tmp/bak`
cd /tmp/bak
for i in $a
do
  newname=`ls $i |sed 's/.bak//'`
  mv $i $newname
done

0

hyhmnn

赞同来自:

#!/bin/bash
cd /root
for file in `ls /root|grep '.bak.bak'`;
do
newfile=`echo $file|sed 's#.bak.bak##g'`
mv $file $newfile
done

0

西瓜糖

赞同来自:

#!/bin/bash
#Description: This script is to batch rename file names 
#Author: Jiazhi Yang
#Date: 14/11/2016
#Script Name: batchrename.sh

#定义文件的目录
PWD='/tmp/exercise'

#进入到文件的目录
cd $PWD

#首先通过ls将.bak.bak结尾的文件列出来,然后通过NF(文件的域个数,在这里相当于几个bak),OFS就是域的分隔符
for i in `ls |grep '.bak.bak$'`;do
        /bin/mv $i `ls $i |awk -F '.' 'NF-=2' OFS='.'`
        done

0

Ject1992he - linux学习

赞同来自:

学习

0

TSpace

赞同来自:

xuexi

0

monga

赞同来自:

#!/bin/bash

file=`ls |grep 'bak'`

for i in $file

 do

  filename=`ls $i |sed  's/.bak//g'`

  mv $i $filename

done

0

杨银根

赞同来自:

#!/bin/bash

for i in `ls /root/*.bak`

do

   li=`echo $i|sed 's/\.bak//g'`

   mv $i $li

done

0

乌贼的帽子

赞同来自:

#!/bin/bahs

for i in `ls |grep '.bak'`

do

    w=`echo $i |sed 's/.bak//g'`

    mv $i $w

done

0

aikera

赞同来自:

[root@aiker01 rename]# vim rename.sh
#!/bin/bash
#by Aiker
for i in `ls | grep .bak`; do mv $i `echo "$i" | awk -F '.bak' '{print $1}'`;done
[root@aiker01 rename]# ll
total 16
-rw-r--r--. 3 aiker aiker    0 Dec  2 16:11 11.txt.bak.bak.bak
-rwxrwxrwx. 1 root  root    10 Dec  4 01:16 120301.txt.bak.bak.bak
-rw-r--r--. 3 aiker aiker    0 Dec  2 16:11 1.txt.bak.bak.bak
-rw-r--r--. 1 root  root     0 Dec  2 23:01 2.txt.bak
-rw-r--r--  1 root  root     0 Dec  7 02:28 {3...5}.txt.bak
-rw-r--r--  1 root  root     0 Dec  7 02:27 3.txt.bak
-rw-r--r--  1 root  root     0 Dec  7 02:27 4.txt.bak
-rw-rw-r--. 1 root  root     0 Dec  7 02:27 5.txt.bak
-rw-rw-r--. 1 root  root     0 Dec  2 22:44 6.txt.bak
-rw-rw-r--. 1 root  root     0 Dec  2 22:48 7.txt.bak
-rw-------. 1 root  root  7668 Dec  2 16:25 a.txt.bak
-rw-r-----  1 root  root     0 Dec  7 00:51 file1.txt.bak
-rw-r-----  1 root  root     0 Dec  7 00:51 file2.txt.bak
-rw-r-----  1 root  root     0 Dec  7 00:51 file3.txt.bak
----r-----  1 root  root     0 Dec  7 00:51 file4.txt.bak
----r-----  1 root  root     0 Dec  7 00:51 file5.txt.bak
-rw----r--  1 root  root     0 Dec  7 00:51 file[6-8].txt.bak
-rw-r--r--  1 root  root     0 Dec  7 00:13 mycprogram.txt.bak
-rw-r--r--  1 root  root     0 Dec  7 00:13 MyCProgram.txt.bak
-rw-r--r--  1 root  root     0 Dec  7 00:13 Program.txt.bak
-rw-r--r--  1 root  root   104 Dec 12 01:23 rename.sh
[root@aiker01 rename]# sh -x rename.sh
[root@aiker01 rename]# ll
total 16
-rw-r--r--. 3 aiker aiker    0 Dec  2 16:11 11.txt
-rwxrwxrwx. 1 root  root    10 Dec  4 01:16 120301.txt
-rw-r--r--. 3 aiker aiker    0 Dec  2 16:11 1.txt
-rw-r--r--. 1 root  root     0 Dec  2 23:01 2.txt
-rw-r--r--  1 root  root     0 Dec  7 02:28 {3...5}.txt
-rw-r--r--  1 root  root     0 Dec  7 02:27 3.txt
-rw-r--r--  1 root  root     0 Dec  7 02:27 4.txt
-rw-rw-r--. 1 root  root     0 Dec  7 02:27 5.txt
-rw-rw-r--. 1 root  root     0 Dec  2 22:44 6.txt
-rw-rw-r--. 1 root  root     0 Dec  2 22:48 7.txt
-rw-------. 1 root  root  7668 Dec  2 16:25 a.txt
-rw-r-----  1 root  root     0 Dec  7 00:51 file1.txt
-rw-r-----  1 root  root     0 Dec  7 00:51 file2.txt
-rw-r-----  1 root  root     0 Dec  7 00:51 file3.txt
----r-----  1 root  root     0 Dec  7 00:51 file4.txt
----r-----  1 root  root     0 Dec  7 00:51 file5.txt
-rw----r--  1 root  root     0 Dec  7 00:51 file[6-8].txt
-rw-r--r--  1 root  root     0 Dec  7 00:13 mycprogram.txt
-rw-r--r--  1 root  root     0 Dec  7 00:13 MyCProgram.txt
-rw-r--r--  1 root  root     0 Dec  7 00:13 Program.txt
-rw-r--r--  1 root  root   104 Dec 12 01:23 rename.sh


0

jiapingbian@sina.com

赞同来自:

ls | awk -F '.' '{print $1"."$2}'

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: