私に何か奇妙なことが起こっています。私は非常に単純なスクリプトを使用していくつかのディレクトリを生成します。
...すべてのディレクトリを作成します(正しい権限を持つユーザーとして実行)。例:
mkdir -p /home/EAI003A/05_EDSNFE/ISU2EAI/VEA/tre
しかし、私が得るディレクトリは2倍です!私がこれをするときls -lrt
私は得ます。
uxel081c: wmb - /home/EAI003A/05_EDSNFE/EAI2ISU/VEA # ls -lrt
total 0
drwxr-xr-x 2 wmb mqbrkrs 256 Jan 28 15:25 tre
drwxr-xr-x 2 wmb mqbrkrs 256 Jan 28 15:25 err
drwxr-xr-x 2 wmb mqbrkrs 256 Jan 28 15:25 arc
drwxr-xr-x 2 wmb mqbrkrs 256 Jun 12 08:35 tre
drwxr-xr-x 2 wmb mqbrkrs 256 Jun 12 08:35 tbt
drwxr-xr-x 2 wmb mqbrkrs 256 Jun 12 08:35 err
drwxr-xr-x 2 wmb mqbrkrs 256 Jun 12 08:35 arc
drwxr-xr-x 2 wmb mqbrkrs 256 Jun 13 10:49 tbt
(二重注意特殊、TBT、アーク...)
デュアルディレクトリは同じデータを指します。
一般的なことをls
すれば得る。
uxel081c: wmb - /home/EAI003A/05_EDSNFE/EAI2ISU/VEA # ls
tre tre
したがって、ディレクトリは2つだけです!
どうしたの?
答え1
推測する必要がある場合は、このファイルとファイル名に印刷できない文字が含まれているという事実に懐疑的です。次のスイッチを使用してこれらの特殊文字を表示できますls
。
Locating "non-printing" characters in file names
The ls command has all the options you need to detect "hidden" characters:
Command Function Sample Output
------- -------- ------ ------
ls hides/interprets nongraphic characters zzz
ls -b prints octal codes for nongraphic characters zzz\010\010\010aaa
ls -q prints question marks for nongraphic characters zzz???aaa
このタイプの文字と移動可能文字の詳細については、上記のページを参照してください。
答え2
私の考えでは、ある時点でWindowsでスクリプトを編集し、そのバージョンはWindowsラインターミネーター:CR(キャリッジリターン)の後にLF(改行)が続きます。 Unix シェルの場合、LF は行終端、CR は一般文字です。したがって、スクリプトに次のものがある場合(ここで␍はCR文字です):
mkdir -p /home/EAI003A/05_EDSNFE/ISU2EAI/VEA/tre␍
その後、エディタで次のことを確認できます。
mkdir -p /home/EAI003A/05_EDSNFE/ISU2EAI/VEA/tre
ただし、シェルは、コマンドがmkdir
パラメータ-p
と/home/EAI003A/05_EDSNFE/ISU2EAI/VEA/tre␍
。
CR文字が端末に印刷される場合、その効果はカーソルを行の先頭に移動させることです。使用時にls -l
CRは行末にのみ表示されるため、目に見える効果はありません。プレーンの場合、最後ls
のCR
2番目のファイル名ごとに、次のファイル名のペアが前の行を上書きします。
次のいずれかのコマンドを使用して、Unix 行末を使用するようにスクリプトを変換します。
dos2unix /path/to/script # if dos2unix is available
sed -i -e $'s/\r//' /path/to/script # on Linux or Cygwin only
perl -i -e 's/\r$//' /path/to/script
編集者にもこれを行う方法があるかもしれません。エディタでシェルスクリプトを編集するときは、行が「CRLF」、「Windows」、または「DOS」ではなく「LF」、「Unix」、または「Linux」で終わっていることを確認してください。
UNIXのバリエーションに従って、ファイル名に特殊文字を表示してみてくださいls -b
。両方のディレクトリをマージするには、まずファイルを正しいディレクトリに移動してから、別のディレクトリを削除します。ls -Q
ls -q
mv -i tre/* tre?/
rmdir tre?/