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

次のシェル スクリプトを作成しましたが、スクリプトの初期から最後に検索する値を渡す方法がわかりません。

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

シェルに入力行をフィールドに分割させることで、コードを節約することもできます。

while read oldName adminDB title; do
    ...
done

行全体から元の空白が失われるため、それが重要な場合は、この一方的なアドバイスを無視してください。

于 2012-08-28T17:48:22.307 に答える