linux - 传递 shell 脚本变量以查找

标签 linux shell

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

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/

相关文章:

使用 Curl 的 Linux Bash 脚本读取循环问题

php - 如何安装/启用 PHP phar 扩展?

python - 问题导入 subprocess32

Linux:如何查找手册页或不同版本的 Linux 命令?

php - PHP 中长命令的 exec() 问题

shell - 有没有一个windows shell工具可以保存历史记录?

linux - 如何在同一目录中复制文件名已更改的文件

无法通过 DNS 欺骗欺骗主机命令

linux - 在 bash 中循环每个变量一次,而不是在第二个循环中每隔一个变量循环一次?

linux - 使用exec命令时无法退出Shell脚本