2016-08-24 119 views
0

我知道處理文件名中空格的一種方法是用單引號括起文件名:"'"。我有一個目錄和一個帶空格的文件名。我想要一個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 

這是部分工作。它不適用於有空格的目錄和文件。

+0

如果你想與空格的字符串顯示爲一個單一的道理,只是把它放在雙引號。例如''$ Temp_Path/File_Posted_ $ CURRENT_DATE.txt「' –

回答

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" 

你應該養成像你在文章中提到的那樣引用所有變量擴展的習慣。

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"