Shell脚本问题包含空格的目录和文件名

时间:2016-08-24 15:29:11

标签: bash shell unix

我知道处理文件名中的空格的一种方法是用单引号括起文件名:"'"。我有一个目录和一个带空格的文件名。我想要一个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

部分正常工作。它不适用于包含空格的目录和文件。

2 个答案:

答案 0 :(得分:1)

使用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"

你也应养成引用你在帖子中提到的所有变量扩展的习惯。

答案 1 :(得分:0)

您可以暂时更改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"