当前位置: 首页 > 面试题库 >

BASH中带有空格的文件名

贺方伟
2023-03-14
问题内容

我正在尝试编写脚本,将大照片裁剪并调整为高清壁纸。

#! /bin/bash


for i in `ls *.jpg`
do
    width=`identify -format '%w' $i`
    height=`identify -format '%h' $i`

    if [ `echo "$width/$height > 16/9" | bc -l` ]
    then
        exec `convert $i -resize 1920 -gravity Center -crop '1920x1080+0+0' +repage temp`
    else
        exec `convert $i -resize x1080 -gravity Center -crop 1920x1080+0+0 +repage temp`
    fi

    rm $i
    mv temp $i
done

但是该脚本似乎在文件名中带有空格的问题(例如Tumble Weed.jpg)。我怎样才能解决这个问题?


问题答案:

首先,您不需要ls。通过ls在backtics中使用,您可以使bash隐式地将字符串解析为一个列表,该列表按空格分隔。而是让bash生成列表并将其分离,而无需进行此类怪癖:

另外,您需要将所有$i用法都括在引号中,以使bash整体上替代它,而不是将字符串拆分成多个单独的单词。

这是演示两种想法的脚本:

for i in *.jpg ; do 
  echo "$i";
done


 类似资料:
  • 问题内容: 我 是否 必须删除文件名中的所有空格才能将其导入,或者是否可以通过某种方式知道是否存在空格? 问题答案: 您应该从文件名中删除空格。由于文件名被用作导入模块的标识符(即将被导入为),而Python标识符不能有空格,因此该语句不支持此操作。 如果由于某些原因 确实 需要执行此操作,可以使用以下函数: 这将导入为。这与该语句的行为略有不同,应避免使用它。

  • 文件路径类似于C:\test\NPP\223083-A\u BELI Frenchips Poulet roti face。eps 该命令适用于文件名中没有空格但带有空格的文件,它给出的错误如下: {转换:无法打开图像'C:\test\NPP\223083-A_BELI':没有这样的文件或目录@error/blob. c/OpenBlob/3094.convert:没有此图像格式的解码委托'@er

  • 本文向大家介绍处理Shell脚本中带有空格的变量(bash脚本),包括了处理Shell脚本中带有空格的变量(bash脚本)的使用技巧和注意事项,需要的朋友参考一下 本篇主要介绍bash脚本中对于含空格文件处理方式。 在批量处理音频文件时候使用下面的脚本发现含有空格的文件名并不能被处理; 通过set -x将执行信息打印出来,发现可以执行到,但是执行过程提示找不到对应的文件名,mv对应的source文

  • 问题内容: 运行将返回“ Clear Workspace = true”。如何在bash中访问它?仅供参考,它来自Jenkins Parameterized Build参数名称。似乎不起作用。 而且,詹金斯怎么能创建这个环境变量?在bash中运行显然不起作用,因为它尝试使用参数“ Workspace = true”运行“ Clear”命令。 我当然可以将作业参数名称设置为Clear_Workspa

  • 问题内容: 我正在尝试使用FileInputStream打开名称中包含空格的文件。 例如: 结果是抛出了FileNotFoundException。我试图对filePath进行硬编码,以仅查看是否应该转义空格字符,但它似乎没有用。关于这个问题有什么建议吗? 编辑:只是与每个人都在同一个页面上查看此问题…打开名称中没有空格的文件有效,具有空格的文件将失败。权限既不是这里的问题,也不不是文件夹分隔符。

  • 问题内容: 谁能推荐一种安全的解决方案,从给定的根目录开始,用文件名和目录名中的下划线递归替换空格?例如: 变成: 问题答案: 使用(aka )这是一个Perl脚本,可能已经在您的系统上。分两个步骤进行: 基于 Jürgen的 回答,并且能够使用(Perl脚本)的“ Revision 1.5 1998/12/18 16:16:31 rmb1”版本在一个绑定中处理多层文件和目录: