我正在以递归方式重命名目录中的目录和文件。
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 {} \;
重命名
提前致谢!
答案 0 :(得分:3)
我认为你只需要使用双引号:
find ./ -name "${oldName}*" -exec rename $oldName $adminDB {} \;
您还可以通过让shell将输入行拆分为字段来保存一些代码:
while read oldName adminDB title; do
...
done
你会从整行中丢失原始的空白,所以如果这很重要,请忽略这个未经请求的建议。