Bash (mogrify)ln-s创建文件副本

Bash (mogrify)ln-s创建文件副本,bash,batch-file,find,ln,mogrify,Bash,Batch File,Find,Ln,Mogrify,运行以下脚本: for i in $(find dir -name "*.jpg"); do ln -s $i done 难以置信地为90%的文件制作符号链接,并为剩余的10%制作副本。怎么可能呢 编辑:之后发生的事情是相关的: 这些是我通过mogrify旋转的图像链接,例如 mogrify -rotate 90 link_to_image 链接上的mogrify似乎在默默地复制图像,这是一个值得商榷的选择,但事实就是如此。如果您想了解更多关于处理名称中带有空格的文件的信息,请跳过第一段

运行以下脚本:

for i in $(find dir -name "*.jpg"); do
  ln -s $i
done
难以置信地为90%的文件制作符号链接,并为剩余的10%制作副本。怎么可能呢

编辑:之后发生的事情是相关的:

这些是我通过mogrify旋转的图像链接,例如

mogrify -rotate 90 link_to_image

链接上的mogrify似乎在默默地复制图像,这是一个值得商榷的选择,但事实就是如此。

如果您想了解更多关于处理名称中带有空格的文件的信息,请跳过第一段。

目前还不清楚问题的根源是什么,我们的假设是问题出在文件名中的空格中:包含这些空格的文件没有正确处理

真正的问题是mogrify,它应用于创建的链接,处理它们并使用真实文件进行更改

文件名中没有空格

处理名称中带有空格的文件

这是因为文件名中有空格。 你可以这样写:

find dir -name \*.jpg | while IFS= read i
do
  ln -s "$i"
done
IFS=
在这里用于避免前导空格的剥离,感谢@Alfe的提示)

或者使用
xargs

如果名称可能包含“\n”,最好使用
print0

find dir -name \*.jpg -print0 | xargs -0 -N1 ln -s
当然,您也可以使用其他方法,例如:

find dir -name '*.jpg' -exec ln -s "{}" \;
ln -s "$(find dir -name '*.jpg')" .

如果您想了解有关处理名称中带有空格的文件的更多信息,请跳过第一段

目前还不清楚问题的根源是什么,我们的假设是问题出在文件名中的空格中:包含这些空格的文件没有正确处理

真正的问题是mogrify,它应用于创建的链接,处理它们并使用真实文件进行更改

文件名中没有空格

处理名称中带有空格的文件

这是因为文件名中有空格。 你可以这样写:

find dir -name \*.jpg | while IFS= read i
do
  ln -s "$i"
done
IFS=
在这里用于避免前导空格的剥离,感谢@Alfe的提示)

或者使用
xargs

如果名称可能包含“\n”,最好使用
print0

find dir -name \*.jpg -print0 | xargs -0 -N1 ln -s
当然,您也可以使用其他方法,例如:

find dir -name '*.jpg' -exec ln -s "{}" \;
ln -s "$(find dir -name '*.jpg')" .

尝试使用单引号:

find dir -name '*.jpg' -exec ln -s "{}" \;

尝试使用单引号:

find dir -name '*.jpg' -exec ln -s "{}" \;


(Imagemagick)应用于链接的mogrify删除链接并复制图像应用于链接的mogrify删除链接并复制图像

是否有任何文件名包含空格/其他空格?它们没有:Sun2ndCapture-10-S4908-2-00008.jpg->../Input/Sun2ndCapture-10-S4908-2/Sun2ndCapture-10-S4908-2-00008。jpg@memecs:那是一个符号链接actually@Igor,是的,有90%的文件名。其他10%的文件名看起来如何?有没有文件名有空格/其他空格?它们没有:Sun2ndCapture-10-S4908-2-00008.jpg->../Input/Sun2ndCapture-10-S4908-2/Sun2ndCapture-10-S4908-2-00008。jpg@memecs:那是一个符号链接actually@Igor,是的,有90%的复制品。其他10%的复制品看起来怎么样?这怎么解释有复制品?唯一的写入命令是
ln-s…
,它不应该创建任何内容的副本。此外,您应该在IFS=read i时使用
,以避免前导空格的剥离,当然,您需要在
ln-s“$i”
处使用双引号。发现问题,请参阅我的answer@memecs:太好了!恭喜!!谢谢你提出一个有趣的问题!!那怎么解释有复制品?唯一的写入命令是
ln-s…
,它不应该创建任何内容的副本。此外,您应该在IFS=read i
时使用
,以避免前导空格的剥离,当然,您需要在
ln-s“$i”
处使用双引号。发现问题,请参阅我的answer@memecs:太好了!恭喜!!谢谢你提出一个有趣的问题!!