传递shell脚本变量来查找

时间:2012-08-28 17:37:02

标签: linux shell

我正在以递归方式重命名目录中的目录和文件。

alan/
    alan_0001.txt
    alan_0002.txt
andy/
    andy_0001.txt
    andy_0002.txt
andytwo/
    andytwo_0001.txt
    andytwo_0002.txt

我有一个制表符分隔文件(希望在此处转载),它提供了文件名的新信息; e.g。

alan     123_123     Alan's Place
andy     124_010     Andy's Place
andytwo     125_001     Andy's Second Place

我已经制定了以下shell脚本,但我不确定如何从脚本的早期传递值以在最后找到。

#!/bin/sh

FILE="sample-list.txt"

exec 3<&0
exec 0<$FILE

while read line
do
    echo $line
    oldName=`echo "$line" | cut -f1`
    adminDB=`echo "$line" | cut -f2`
    title=`echo "$line" | cut -f3`
    echo "$oldName is old, his number is $adminDB, and the title is $title"
    echo "renaming files"
#    echo find -name '{$oldName}*' 
    echo "`find ./ -name '${oldName}*'`"
done
exec 0<&3

我想在$oldName上抛出通配符来捕获andy_0001,_0002文件并使用find ./ -name ${oldName}* -exec rename $oldName $adminDB {} \;重命名

提前致谢!

1 个答案:

答案 0 :(得分:3)

我认为你只需要使用双引号:

find ./ -name "${oldName}*" -exec rename $oldName $adminDB {} \;

您还可以通过让she​​ll将输入行拆分为字段来保存一些代码:

while read oldName adminDB title; do
    ...
done

你会从整行中丢失原始的空白,所以如果这很重要,请忽略这个未经请求的建议。