1

我编写了一个 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"

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

4

1 回答 1

1

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

使用 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"

我希望这对
受此启发的人有用

于 2013-05-02T16:19:24.517 回答