2016-08-24 15 views
0

ファイル名のスペースを扱う1つの方法は、ファイル名を一重引用符で囲むことです:"'"。ディレクトリとファイル名にスペースが含まれています。投稿された時刻とディレクトリ名とともに、すべてのファイルを読み込むシェルスクリプトが必要です。私は以下のスクリプトを書いた:ディレクトリ名とファイル名に空白が含まれているシェルスクリプトの問題

#!/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

あなたは一瞬(Internal Fields Separator)用のIFS変数を変更することができます:あなたは、スペースを含む文字列は、単一のトークンとして表示させたい場合は

#!/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" 
関連する問題