0

私はシェルスクリプトを書いていました.lsコマンドを使用してディレクトリ内のファイル(ZIP)を探し、宛先でそれらを解凍します.問題は、ファイル名の間にスペースがあるため、スクリプトがスキャンするときに後の名前のみを考慮してスキャンするときスペース

例: File name が "ab c.zip" の場合、c.zip のみがファイル名と見なされ、file not found と表示されます。

なので対処法を教えてください

ファイル名を二重引用符で囲むことができればうまくいくはずだと思ったので、 ls コマンドの最後のフィールドに二重引用符を追加する方法を探していました。解凍する前にファイルサイズとタイムスタンプもチェックしているため、lsコマンドのすべてのフィールドが必要です。そのため、lsコマンドの最後のフィールドであるファイル名のみを二重引用符で囲む必要があります。

よろしく、サティア

4

1 に答える 1

1

Bash のワイルドカード パターン(空白を処理します) を使用してファイル リストを取得し、statコマンドを使用して特定のファイルに関する情報を取得することをお勧めします。例えば:

$ ls -l
total 1
-rw-r--r-- 1 root root 0 2013-03-25 16:27 a b c.txt
-rw-r--r-- 1 root root 0 2013-03-25 16:27 d e f.txt
$ for file in *.txt; do stat "$file"; done
  File: `a b c.txt'
  Size: 0               Blocks: 1          IO Block: 131072 regular empty file
Device: 3dd0002h/64815106d      Inode: 455629      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2013-03-25 16:27:35.388291856 +0800
Modify: 2013-03-25 16:27:35.388291856 +0800
Change: 2013-03-25 16:27:35.388310939 +0800
  File: `d e f.txt'
  Size: 0               Blocks: 1          IO Block: 131072 regular empty file
Device: 3dd0002h/64815106d      Inode: 455630      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2013-03-25 16:27:35.388401772 +0800
Modify: 2013-03-25 16:27:35.388401772 +0800
Change: 2013-03-25 16:27:35.388412772 +0800
$

statにはオプションがあることに注意してください。その--formatため、ファイルについて興味のある情報のみを提供するように指示できます。

于 2013-03-25T08:32:26.813 に答える