shell脚本问题,包含空格的目录和文件名
问题描述:
我知道处理文件名中空格的一种方法是用单引号括起文件名:"'"
。我有一个目录和一个带空格的文件名。我想要一个shell脚本来读取所有文件以及发布时间和目录名称。我写了下面的脚本:shell脚本问题,包含空格的目录和文件名
#!/bin/bash
CURRENT_DATE=`date +'%d%m%Y'`
Temp_Path=/appinfprd/bi/infogix/IA83/InfogixClient/Scripts/IRP/
find /bishare/IRP_PROJECT/SFTP/ -type f | xargs ls -al > $Temp_Path/File_Posted_$CURRENT_DATE.txt
这是部分工作。它不适用于有空格的目录和文件。
答
使用find -print0 | xargs -0
可靠地处理其中包含空格和换行符等特殊字符的文件名。
find /bishare/IRP_PROJECT/SFTP/ -type f -print0 |
xargs -0 ls -al > "$Temp_Path/File_Posted_$CURRENT_DATE.txt"
或者,你可以使用find -exec
它运行你的选择上找到的每个文件的命令。
find /bishare/IRP_PROJECT/SFTP/ -type f -exec ls -al {} + \
> "$Temp_Path/File_Posted_$CURRENT_DATE.txt"
在ls -l
的特定情况下,你可以借此更进一步,使用-ls
行动。
find /bishare/IRP_PROJECT/SFTP/ -type f -ls > "$Temp_Path/File_Posted_$CURRENT_DATE.txt"
你应该养成像你在文章中提到的那样引用所有变量扩展的习惯。
答
您可以更改IFS变量一会儿(Internal Fields Separator):
#!/bin/bash
# Backing up the old value of IFS
OLDIFS="$IFS"
# Making newline the only field separator - spaces are no longer separators
# NOTE that " is the last character in line and the next line starts with "
IFS="
"
CURRENT_DATE=`date +'%d%m%Y'`
Temp_Path=/appinfprd/bi/infogix/IA83/InfogixClient/Scripts/IRP/
find /bishare/IRP_PROJECT/SFTP/ -type f | xargs ls -al > $Temp_Path/File_Posted_$CURRENT_DATE.txt
# Restore the original value of IFS
IFS="$OLDIFS"
如果你想与空格的字符串显示为一个单一的道理,只是把它放在双引号。例如''$ Temp_Path/File_Posted_ $ CURRENT_DATE.txt“' –