【发布时间】:2013-12-03 20:59:10
【问题描述】:
我从文档管理系统导出文件夹和文件,我得到的是一组文件夹和嵌套文件和文件夹,它们具有随机名称。每个文件夹和文件都有一个扩展名为 .esw 的描述符文件,其中包含一个名为 SHORTNAME 的变量,该变量包含真正的文件夹和文件名。我的挑战是现在将这些文件夹和文件重命名为其真实名称。
我找到了一个执行此操作的脚本,但它在第 13 行停止,其中显示“$0”。我所做的唯一更改是移除 dos2unix 实用程序,因为我没有它,也不知道它的作用。
任何提示如何让它在 shell 或 vbs 中工作?
#!/bin/sh
for fl in $(ls)
do
flo="$(echo $fl | sed s/\.esw//)"
if [ -d $flo ]
then
echo "cd $flo"
echo "$0"
echo "cd -"
cd $flo
$0
cd -
echo "checking $fl"
# dos2unix -q -n $fl $fl
# Remove empty spaces and nonsense from description (replace with "_")
sd="$(cat $fl | grep SHORTDESC | sed s/\SHORTDESC=// | sed s/\ /_/ | sed s/\ /_/ | sed
s/\ /_/ | sed s/\ /_/ | sed s/\ /_/ | sed s/\ /_/ | sed s/\ /_/ | sed s/\ /_/ | sed s/\
/_/ | sed s/\ /_/ | sed s/\ /_/ | sed s/\\./_/)"
rm $fl
if [[ "$sd" = '' ]]
then
echo "won't do that"
else
echo "mv $flo $sd"
mv $flo $sd
fi
else
echo "$fl" > $$.tmp
if cat $$.tmp | grep esw > /dev/null
then
rm $$.tmp
if cat $fl | grep SHORTDESC > /dev/null
then
#dos2unix -q -n $fl $fl
ex="$(cat $fl | grep DOCEXT | sed s/\DOCEXT=\.//)"
sd="$(cat $fl | grep SHORTDESC | sed s/\SHORTDESC=// | sed s/\ /_/ | sed s/\ /_/ |
sed s/\ /_/ | sed s/\ /_/ | sed s/\ /_/ | sed s/\ /_/ | sed s/\ /_/ | sed s/\ /_/ | sed
s/\ /_/ | sed s/\ /_/ | sed s/\ /_/ | sed s/\\./_/)"
rm $fl
echo "rm $fl"
echo "mv $flo.* $sd.$ex"
rm $fl
mv $flo.* $sd.$ex
# else
# echo "$fl -- no SHORTDESC!"
fi
else
rm $$.tmp
fi
fi
done
【问题讨论】:
-
你能给我们更多关于这个脚本的信息吗?或者你在哪里找到的?
标签: bash file-rename