假设我有三个图像文件需要编辑。假设所有文件都在 中~/Pictures
。假设第一个文件的名称为1.svg
,第二个文件的名称为2.svg
,第三个文件的名称为3.svg
。我有 Inkscape 编辑器。现在,我想要执行一个 bash 脚本,以便必须发生以下情况:
- 首先
1.svg
必须打开才能让我编辑。 - 编辑后,当我关闭该文件时,
2.svg
必须自动打开以供我编辑。 - 现在,当我完成编辑时
2.svg
,我想要3.svg
打开进行编辑。 - 现在,编辑
3.svg
脚本后必须关闭 GIMP 来结束。
PS:- 如果你想知道这是否是家庭作业,那不是!请参阅这里。你会注意到我必须在那里编辑图片。为了让答案更好,我需要这里的帮助。所以请帮忙。另外我是一个完全的初学者我对 bash 一无所知。所以尽可能详细地解释你的答案。您也可以考虑使用 GIMP 编辑器编辑 .jpg 文件。这可能对其他人有用。顺便说一句,我使用的是 14.04 LTS。提前致谢。
更新:- 上面链接的答案根据下面接受的答案进行了编辑。
答案1
正如 Rmano 所说,您只需for
在终端中执行一个循环即可:
for i in 1.jpg 2.jpg 3.jpg; do gimp $i; done
要么在文件所在的目录中运行此程序,要么每个文件都应该有其其余路径。您可以将任意数量的文件放入其中。
GIMP 将打开文件,然后您编辑它,然后关闭 GIMP。一旦 GIMP 关闭,循环for
将继续并打开列表中的下一个文件。
如果你不想每次都关闭 GIMP,你可以尝试添加read -p
:
for i in 1.jpg 2.jpg 3.jpg; do gimp $i && read -p "Press [Enter] key to continue..."; done
一旦完成文件编辑,您应该能够在终端中按 Enter 键,并且下一个文件应该在 GIMP 中打开,而无需关闭 GIMP。
这是我能想到的最简单的方法,尝试检测 GIMP 何时关闭文件可能会变得复杂。
您的案例备注
Rmano 指出,大多数文件都是 SVG 文件。因此,列出所有 SVG 文件并替换gimp
为inkscape
。PNG 文件用 就可以了gimp
。
答案2
以下命令在默认关联应用程序中打开文件:
edit 1.svg 2.svg 3.svg
如果要按.svg
字母顺序打开所有文件,可以使用*
通配符:
edit *.svg
*
代表任意字符序列,因此您可以以其他方式使用它;例如,连续打开.svg
名称包含以下内容的文件wibble
:
edit *wibble*.svg
如果您想根据更细粒度的模式选择文件,则可以使用其他通配符。
答案3
您可以尝试这样的事情:
shopt -s nullglob
for i in *
do
if [ -d "$i" ]
then
continue
else
inkscape "$i"
fi
done
我在我的图片目录上测试了它并且它似乎有效。
我还不完全理解第一行,但它可以帮助确保我的*
工作。for
然后循环一次循环遍历当前目录中的所有内容。如果它不是目录,它会在 Inkscape 中打开它进行编辑。
当您完成编辑并关闭 inkscape 时,下一个图像将打开,直到没有更多图像。
对于您的具体情况(阅读链接问题后),这可能更有效。记住,cd
然后/usr/share/unity/icons
运行以下命令:
for i in file1.svg file2.svg file3.svg
do
if [ -d "$i" ]
then
continue
else
inkscape "$i"
fi
done
file1.svg file2.svg file3.svg
用您想要编辑的文件列表 替换。