linux - 在逐行文件读取的第一个正斜杠之前在字符串周围加上引号

标签 linux bash shell file

我正在编写一个 bash 脚本,用于删除其路径在 delete.txt 中给出的所有文件。 delete.txt 有数千行,每行都有一个路径,结构如下:

Abies concolor/images/FV-GFVM-725_crop.jpg

第一个目录名称中有空格的地方。

目前,我的 bash 脚本读取 delete.txt 的每一行,将其保存到 $line 并将其删除。

#!/bin/bash

while IFS='' read -r line || [[ -n "$line" ]]; do
    "rm $line"
done < "$1"

但是,因为第一个目录名中有一个空格,所以我的 rm 命令返回:

rm Abies concolor/images/FV-GFVM-725_crop.jpg: No such file or directory

在执行 rm 命令之前,在我的 bash 脚本中如何在每行的第一个和第二个单词之前添加引号?

最佳答案

问题出在rm调用。只要正确引用line变量:

#!/bin/bash

while IFS='' read -r line || [[ -n "$line" ]]; do
   rm "$line"
done < "$1"

或者,更简单,您可以使用 xargs 以及替换完整脚本的单行代码:

cat delete.txt | xargs -I{} rm '{}'

这将运行 rm对于 delete.txt 中的每一行, 正确引用。这里的技巧是使用 -I <placeholder>确保命令 rm '<placeholder>' 的选项每行(不是单词)执行一次,每次替换 <placeholder>使用当前行的文件名。

关于linux - 在逐行文件读取的第一个正斜杠之前在字符串周围加上引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45001350/

相关文章:

linux - 如何获取当前时间的 docker 统计信息?

shell - Python 脚本通过 os.system() 退出代码 256 而不是 1 调用 shell 脚本。为什么?

在 Linux 中使用 C 控制 PWM 设备

linux - Unix 逆序多列排序不起作用

linux - 基于文件名的目录,然后将关联的文件移动到正确的目录以获得随机名称

linux - 如何使用 bashrc 函数更改到文件目标目录?

bash - 并行 : How to reference multiple arguments from a function

c - 在简单 Shell C 中重定向输入/输出

linux - Init.d 脚本导致启动挂起

c - 汇编程序和 C 编程 linux -m32(来自汇编程序寄存器的字符字节)