脚本重命名文件夹&基于输入文件的文件

时间:2013-12-03 20:59:11

标签: bash file-rename

我从文档管理系统导出文件夹和文件,我得到的是文件夹和嵌套文件的集合&具有随机名称的文件夹。每个文件夹和文件都有一个扩展名为.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

1 个答案:

答案 0 :(得分:0)

1)为什么不通过软件包管理器安装dos2unix

2)基本上,第13行正在尝试在PATH(系统搜索可执行文件的目录)中运行一个与当前脚本名称相同的文件。 最有可能的是,脚本旨在从PATH

中的目录运行

尝试将其放在PATH中列出的目录中(请参阅echo $PATH)。如果您不能写任何内容,请在PATH附加一个可以写入的目录并在其中移动脚本。

然后你不应该得到那个错误。