エコーのみを使用してディレクトリの内容(隠しファイルを含む)をファイルに移動できないのはなぜですか?

エコーのみを使用してディレクトリの内容(隠しファイルを含む)をファイルに移動できないのはなぜですか?

というディレクトリがあり、MusiqueONLYを使用してファイルのリストを保存したいと思います。nom.txtecho

しかし、ディレクトリの隠しファイルもコピーし、\n改行文字()を使用してディレクトリの「一般」ファイルから分離したいと思います。

このコマンドを試しましたが、動作しません。なぜ動作しないのかわかりません。 :

echo -e Musique/ \n.* > nom.txt
echo -e \n.* Musique/ > nom.txt
echo -e /Musique \n.* > nom.txt

誰かが私にこれを説明できますか?ありがとう

答え1

私が正しく理解した場合は、追加情報が得られるまで次のコマンドを使用できます。

$ LC_ALL=C ls -1Ar | sed '0,/^\./s/^\./\n./' > nom.txt
$ cat nom.txt
b.txt
c.txt

.foo
.bar

答え2

引用符のない2文字の文字列は\nシェルからに変わりますn。これは、各コマンドラインが文字列(または)の前後にecho文字列をn.*ファイルに印刷することを意味します。現在のディレクトリにパターンと一致するファイルがある場合、コマンドはそのファイルを 。nom.txtMusique//Musiquen.*echo

echo -eおそらくinを使用しているので、bashCエスケープシーケンス(または)を含む引数で指定されたすべての名前は、\n印刷前に変更\tされます。echo

あなたは言わなかったが、あなたが望むものは具体的にechoMusiqueディレクトリ名自体。

ディレクトリの下のすべてのパス名のリストを使用するのが最も簡単ですfind

find Musique

上記のコマンドは、特定の検索パスを再帰的に検索し、見つかった各パス名を独自の行に出力します。サブディレクトリへの繰り返しを停止するには、コマンドの最後にfindそれを追加します(Linuxシステムなどの最新の実装を使用しているとします)。-maxdepth 1find

隠されていない名前に対してのみこれを実行してください。

find Musique ! -name '.*'

または、隠された名前にのみ適用されます。

find Musique -name '.*'

パス名をスペースで区切って1行に表示し、find結果をpaste

find Musique -maxdepth 1 | paste -s -d ' ' -

生成されたパス名のリスト自体は、見る以外には役に立ちません。たとえば、Unix システムのファイル名にはスペース、タブ、および改行を含めることができるため、ファイル名を確実に区別することは困難です。

各パス名に対して操作を実行するには、通常、findその述語を使用して-execコマンドで実行できます。

答え3

私はあなたが次のようなことをしたいと思います:

echo -e Musique/* '\n' Musique/.* >nom.txt

関連情報