我从文档管理系统导出文件夹和文件,我得到的是文件夹和嵌套文件的集合&具有随机名称的文件夹。每个文件夹和文件都有一个扩展名为.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
答案 0 :(得分:0)
1)为什么不通过软件包管理器安装dos2unix
。
2)基本上,第13行正在尝试在PATH
(系统搜索可执行文件的目录)中运行一个与当前脚本名称相同的文件。
最有可能的是,脚本旨在从PATH
。
尝试将其放在PATH
中列出的目录中(请参阅echo $PATH
)。如果您不能写任何内容,请在PATH
附加一个可以写入的目录并在其中移动脚本。
然后你不应该得到那个错误。