Linux Bash脚本-将文件夹名称中的最后一个逗号替换为&;

Linux Bash脚本-将文件夹名称中的最后一个逗号替换为&;,linux,bash,Linux,Bash,我需要帮助写一个Bash脚本。我想让它通过一个文件夹,并重命名所有子文件夹,以取代最后一个逗号与一个符号 用于目录in/home/john/Documents/TEST/*; 做 #***这是我无法理解的部分*** 完成 假设文件夹是'1234 John,James,Jack'-我希望它成为'1234 John,James&Jack'这是一份适合一个年轻人的工作;本节还介绍了用于此目的和类似目的的技术 请参见在线回复上的演示,网址为,这是一份适合年轻人的工作;本节还介绍了用于此目的和类似目的的

我需要帮助写一个Bash脚本。我想让它通过一个文件夹,并重命名所有子文件夹,以取代最后一个逗号与一个符号

用于目录in/home/john/Documents/TEST/*;
做
#***这是我无法理解的部分***
完成

假设文件夹是
'1234 John,James,Jack'
-我希望它成为
'1234 John,James&Jack'
这是一份适合一个年轻人的工作;本节还介绍了用于此目的和类似目的的技术


请参见在线回复上的演示,网址为

,这是一份适合年轻人的工作;本节还介绍了用于此目的和类似目的的技术

请参见在线回复中的演示

您可以使用
sed
将dir name中的最后一个逗号替换为&


您只需使用
sed
将dir name中的最后一个逗号替换为&。

注意,如果您显示了失败的尝试,这将是一个更强烈的问题,因此我们可以更好地处理您挂断的确切位置和原因。这几乎是一个“请为我编写代码”的问题,我们对此表示不满。顺便说一句,您的描述与示例数据不太匹配——描述说您只想将最后一个逗号以1:1的比例切换为一个符号,示例数据表示要将其替换为后跟符号的空格。用于关闭此问题的重复目标似乎不正确。我投票重新开始这个问题。请注意,如果你展示了你失败的尝试,这将是一个更强的问题,因此我们可以更好地处理你到底在哪里挂断以及为什么挂断。这几乎是一个“请为我编写代码”的问题,我们对此表示不满。顺便说一句,您的描述与示例数据不太匹配——描述说您只想将最后一个逗号以1:1的比例切换为一个符号,示例数据表示要将其替换为后跟符号的空格。用于关闭此问题的重复目标似乎不正确。我正在投票重新打开这个问题。GNU bash,5.0.3版,它工作得很好。请参阅以获取显示问题的在线回复。看看它是如何将
/home/john/Documents/Test/john,
作为
James,
Jack/
?@CharlesDuffy很抱歉地说:它工作得很好。we.tl/t-zROk4hieXr(在这里获取一个测试档案)在这里获取它,在结尾处大致相同您的
abc,abc,abc
测试文件名没有空格。OP的
1234 John,James,Jack
does.GNU bash,5.0.3版运行良好。有关显示问题的在线回复,请参阅。看看它是如何将
/home/john/Documents/Test/john,
作为
James,
Jack/
?@CharlesDuffy很抱歉地说:它工作得很好。we.tl/t-zROk4hieXr(在这里获取一个测试档案)在这里获取它,在结尾处大致相同您的
abc,abc,abc
测试文件名没有空格。OP的
1234约翰,詹姆斯,杰克
for f in /home/john/Documents/TEST/*,*/; do  # final / means we match only directories
  f=${f%/}       # remove the last /
  front=${f%,*}  # front is everything before the last comma
  back=${f##*,}  # back is everything after the last comma
  mv -- "$f" "${front}&${back}"
done
for dir in /home/john/Documents/TEST/*,*/; 
do 
    newdir=$(echo "${dir}" | sed 's/\(.*\),/\1\&/')
    mv "${dir}" "${newdir}"
done