遍历目录中的所有文件,文件名称中包含空格

使用ls遍历文件名称时发现,如果文件名称中有空格的话,会根据空格将文件名称切分成多段,所以做了如下处理
1.先将空格替换成某个特殊字符串–> ls * | tr " " “?”
2.在使用时,将特殊字符串 换回空格–> pathfile=echo "$file" |sed 's/\?/ /g'

#!/bin/bash
cd /home/appadmin/RMClient/DATA/RM_OUTPUT/$1
for file in $(ls * | tr " " "\?")
do
    pathfile=`echo "$file" |sed 's/\?/ /g'`
    cd /home/appadmin/JAR/Gen_AnalPositions
    VAR=$(java -jar Gen_AnalPositions.jar "/home/appadmin/RMClient/DATA/RM_OUTPUT/$1/$pathfile")
done
if [ $? -ne 0 ]; then
       echo $VAR
       exit 1
fi
exit 0

*注意点:
1.赋值变量是等号左右不能有空格,否则会报错

DownReportJar.sh: line 6: ***: command not found

2.往脚本或jar包传参时 不要忘记将参数加上"",如果不加会被按空格切分,当成多个参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是一个简单的shell脚本,可以列出当前目录下的所有文件,并通过询问用户选择要删除的文件。 ```bash #!/bin/bash #列出当前目录下的所有文件 ls #询问用户是否要删除文件 read -p "Enter the name of the file you want to delete or 'q' to quit: " filename while [ "$filename" != "q" ] do #判断文件是否存在 if [ -e "$filename" ] then #询问用户是否确认删除 read -p "Are you sure you want to delete $filename? [y/n]: " answer if [ "$answer" == "y" ] then #删除文件 rm "$filename" echo "$filename deleted." else echo "$filename not deleted." fi else echo "$filename does not exist." fi #继续询问用户是否要删除文件或退出 read -p "Enter the name of the file you want to delete or 'q' to quit: " filename done ``` 运行脚本时,会先列出当前目录下的所有文件,然后要求用户输入要删除的文件名或输入 "q" 退出。如果文件存在,脚本会询问用户是否确认删除。如果用户确认要删除,脚本将删除该文件并显示删除成功的消息,否则脚本将显示删除失败的消息。如果文件不存在,脚本将显示文件不存在的消息。 请注意,此脚本没有任何安全措施,例如防止误删重要文件。在使用时请小心谨慎,确保您要删除的文件是正确的。 ### 回答2: 在Shell,我们可以使用以下的命令来列出目录下的所有文件: ``` ls ``` 该命令会将目录的所有文件(包括目录和隐藏文件)打印到终端上。 如果要通过选项选择需要删除的文件并进行删除,可以使用以下步骤: 1. 首先,使用ls命令列出目录下的所有文件。 ``` ls ``` 2. 根据列出的文件列表,确定要删除的文件名称,并使用rm命令删除文件。例如,要删除文件名为file1和file2的文件,可以使用以下命令: ``` rm file1 file2 ``` 请注意,在使用rm命令删除文件之前,请确保你真正想要删除这些文件,因为在删除后无法恢复。 3. 如果要删除多个文件,可以使用通配符“*”来匹配文件名称的一部分。例如,要删除以“.txt”结尾的所有文件,可以使用以下命令: ``` rm *.txt ``` 这个命令会删除目录所有以“.txt”结尾的文件。 总结起来,要列出目录下的所有文件,使用ls命令;要删除文件,使用rm命令,并根据需要选择不同的选项和文件名称进行删除。 ### 回答3: 你可以使用以下的Shell脚本来列出目录下的所有文件,并通过选项选择需要删除的文件并进行删除: ```shell #!/bin/bash # 获取当前目录 current_dir=$(pwd) # 列出目录下的所有文件 ls $current_dir # 提示用户选择文件进行删除 echo "请输入需要删除的文件名(多个文件名用空格分隔):" read files_to_delete # 将输入的文件名以空格为分隔符分割为数组 IFS=' ' read -r -a file_list <<< "$files_to_delete" # 遍历文件数组并删除文件 for file in "${file_list[@]}" do rm -i "$current_dir/$file" done echo "文件删除成功。" ``` 以上脚本首先获取当前目录,并使用`ls`命令列出当前目录下的所有文件。然后提示用户输入需要删除的文件名,用户可以输入多个文件名,并用空格分隔。接着脚本将输入的文件名存储到一个数组,利用`for`循环遍历数组,使用`rm -i`命令来删除选文件,并在删除前提示用户确认操作。最后输出删除成功的提示信息。 请注意,使用`rm -i`命令来删除文件会询问用户确认操作,确保了删除的操作安全性。如果你不需要确认操作,可以将`rm -i`改为`rm -f`。同时,该脚本仅适用于当前目录下的文件删除,如果需要删除其他目录下的文件,可以根据需要修改`current_dir`变量的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值