我正在研究以递归方式重命名目录和目录中的文件。
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 {}\;
提前致谢!
最佳答案
我认为你只需要使用双引号:
find ./ -name "${oldName}*" -exec rename $oldName $adminDB {} \;
您还可以通过让 shell 将输入行拆分为字段来节省一些代码:
while read oldName adminDB title; do
...
done
您会丢失整行中的原始空格,因此如果这很重要,请忽略此未经请求的建议。
关于linux - 传递 shell 脚本变量以查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12164573/