1

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

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

我有一个制表符分隔的文件(希望在这里复制),它提供了文件名的新信息;例如

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 {} \;

提前致谢!

4

1 回答 1

3

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

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

您还可以通过让 shell 将输入行拆分为字段来节省一些代码:

while read oldName adminDB title; do
    ...
done

您会丢失整行中的原始空格,因此如果这很重要,请忽略这个不请自来的建议。

于 2012-08-28T17:48:22.307 回答