ディレクトリが2回一覧表示されます

ディレクトリが2回一覧表示されます

私に何か奇妙なことが起こっています。私は非常に単純なスクリプトを使用していくつかのディレクトリを生成します。

...すべてのディレクトリを作成します(正しい権限を持つユーザーとして実行)。例:

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 -lCRは行末にのみ表示されるため、目に見える効果はありません。プレーンの場合、最後lsCR2番目のファイル名ごとに、次のファイル名のペアが前の行を上書きします。

次のいずれかのコマンドを使用して、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 -Qls -q

mv -i tre/* tre?/
rmdir tre?/

関連情報