我怎样才能使用$ NAUTILUS_SCRIPT_SELECTED_FILE_PATHS

时间:2013-05-01 22:40:20

标签: bash nautilus

我写了一个bash脚本,它看起来像这样:

#!/bin/bash
D=`zenity --entry --entry-text='Folder'`
pattern1=`zenity --entry --entry-text='replace'`
pattern2=`zenity --entry --entry-text='by'`
cd "$D"
rename "s/$pattern1/$pattern2/g" *
zenity --info --text="Done"

效果很好。
我把它添加到nautilus scrips文件夹(〜/ .gnome2 / nautilus-scripts),
我做了一些改变:

#!/bin/bash
pattern1=`zenity --entry --entry-text='replace'`
if [ "$?" -eq 1 ]
then
    exit
fi
pattern2=`zenity --entry --entry-text='by'`
if [ "$?" -eq 1 ]
then
    exit
fi
rename "s/$pattern1/$pattern2/g" \'$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS\'
zenity --info --text="Done"

但它不起作用。
我希望我能找到一些帮助 提前谢谢。

1 个答案:

答案 0 :(得分:0)

问题通过两种方式得到解决。 第一个:

使用for循环:

#!/bin/bash
pattern1=`zenity --entry --entry-text='replace'`
if [ "$?" -eq 1 ]
then
    exit
fi
pattern2=`zenity --entry --entry-text='by'`
if [ "$?" -eq 1 ]
then
   exit
fi
for file in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
   do
     rename "s/$motif1/$motif2/g" "$file"
done
zenity --info --text="Done"
第二个: 使用while循环:

#!/bin/bash
pattern1=`zenity --entry --entry-text='replace'`
if [ "$?" -eq 1 ]
then
    exit
fi
pattern2=`zenity --entry --entry-text='by'`
if [ "$?" -eq 1 ]
then
   exit
fi
echo $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS | while read 'file'
do
  rename "s/$motif1/$motif2/g" "$file"
done
zenity --info --text="Done"

现在的问题是为什么我必须这样做 答案是因为$ NAUTILUS_SCRIPT_SELECTED_FILE_PATHS是序列
即使选择了一个文件,我们也会在$ NAUTILUS_SCRIPT_SELECTED_FILE_PATHS中找到文件选择路径和分隔符字符
您可以通过使用此命令来看到:(将其添加到脚本中)

zenity --entry --entry-text="$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"

我希望这对某人来说很有用 Inspired by that