我正在学习Bin/Bash中的重命名功能,我有两个目标,我想写脚本。
1.我有500个不同公司名称的唯一文件夹名称需要更新。我目前在一个Excel文档中有信息,其中A列= OldName,B列= NewName。我想运行一个脚本来引用在A列中找到的任何名称,并将其替换为同一行中匹配的B列。
1.然后在这些文件夹目录下,我必须做同样的事情。
我已经研究了ubuntu Linux虚拟机上的rename [1]函数,但我发现的常见脚本如下:
cd yourDir
find . -type d -name "*test*" | while read f; do mv $f $(echo $f | sed 's/test/demo/'); done
find . -type f -name "*test*" | while read f; do mv $f $(echo $f | sed 's/test/demo/'); done
这些类型的脚本替换“X”值与“Y”,而我想从列A和列B替换匹配特定的名称。
谢谢你,谢谢
测试了Ubuntu的Ubuntu函数如下:
cd yourDir
find . -type d -name "*test*" | while read f; do mv $f $(echo $f | sed 's/test/demo/'); done
find . -type f -name "*test*" | while read f; do mv $f $(echo $f | sed 's/test/demo/'); done
然而,这并没有完成我想做的事情,因为每个名字都是特定的。
1条答案
按热度按时间5ktev3wc1#
您可能可以使用GNU
findutils
中的find
、一个bash
关联数组(仅限最近的bash
)和一个bash
函数来完成所有这些操作。首先使用任何excel处理器(例如
incsv
和csvcut
)从文件中提取您的旧名称和新名称,并将它们存储在关联数组中。由于您没有给予有关此excel文件的详细信息,因此让我们假设您知道如何执行此操作,并且arr[old]=new
已经定义。下面假设您要分别在1
、2
和3
中重命名目录a
、b
和c
。因此,我们宣布:接下来,由于数组bash变量不能导出,让我们导出一个函数来重命名,并使用邪恶的
eval
来声明它与关联数组的内部声明:最后,让我们在
find
上进行一个小演示:如果看起来没问题,在
foo
的声明中删除mv
命令前面的echo
。注意:需要
-depth
才能首先重命名叶子。函数声明的引号使用了双引号和单引号的混合,它需要合并arr
关联数组的声明。