我正在编写一个 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/