我正在编写一个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脚本中在每行的第一个单词之前和之后添加引号?
答案 0 :(得分:1)
问题在于line
调用。只需正确引用#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
rm "$line"
done < "$1"
变量:
cat delete.txt | xargs -I{} rm '{}'
或者,甚至更简单,您可以使用xargs
和oneliner替换完整的脚本:
rm
这将为delete.txt
中的每一行-I <placeholder>
运行,并正确引用。这里的诀窍是使用rm '<placeholder>'
选项,这将确保命令<placeholder>
每行执行一次(不是单词),每次用<ContentPage.BindingContext>
<viewModels:InqueritoViewModel/>
</ContentPage.BindingContext>
<StackLayout>
<Button Command="{Binding GetinqueritoCommand}" Text="Open Inquery"></Button>
<ListView x:Name="InqueritoView" ItemsSource="{Binding Inqueritos}" HasUnevenRows="True" ItemSelected="ListView_OnItemSelected">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<StackLayout>
<Label x:Name="Label1" Text="{Binding Pergunta}"></Label>
</StackLayout>
<StackLayout Orientation="Horizontal">
<controls:Checkbox></controls:Checkbox>
<Label Text="{Binding Resposta}" VerticalTextAlignment="Center"></Label>
</StackLayout>
<StackLayout Orientation="Horizontal">
<controls:Checkbox></controls:Checkbox>
<Label Text="{Binding Resposta1}" VerticalTextAlignment="Center"></Label>
</StackLayout>
<StackLayout Orientation="Horizontal" >
<controls:Checkbox></controls:Checkbox>
<Label Text="{Binding Resposta2}" VerticalTextAlignment="Center"></Label>
</StackLayout>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
替换当前行的文件名。