指定されたディレクトリのすべてのサブディレクトリのリストを出力するコマンドのパイプシーケンスを記述し、新しい行に続いて1行で出力します。
次のコマンドの出力をすべて同じ行にし、最後に新しい行を作成するのに問題があります。
これは私のパイプコマンドです:
ls -l /share/ |grep ^d |tr -s ' ' |cut -f9 -d' '| tr '\n' ' '
そして、出力を次のようにしたいです:
file1 file3
[user@linux]$
ではなく(私が実際に得るもの:
file1 file3[user@linux]$
ディレクトリ名のみを取得したい場合は、find
を使用できます。
find /share -maxdepth 1 -type d -printf '%f\n'
例:
% find /usr -maxdepth 1 -type d -printf '%f\n'
usr
include
lib
share
sbin
local
bin
games
lib32
src
元の回答:
zsh
のようなインテリジェントシェルを使用するか、printf
を使用します。
printf '%s\n' "$(ls -l /share/ |grep ^d |tr -s ' ' |cut -f9 -d' '| tr '\n' ' ')"
help printf
をご覧ください。
どうですか:
ls -l $/share/ |grep ^d |tr -s ' ' |cut -f9 -d' '| tr '\n' ' ' && echo " "
最も簡単な解決策は、引数のないプレーンなecho
コマンドをコマンドの最後に追加することです。
ls -l $/share/ |grep ^d |tr -s ' ' |cut -f9 -d' '| tr '\n' ' ' ; echo
コマンドを;
とリンクさせたくない場合は、以下も使用できます。
echo $(ls -l $/share/ |grep ^d |tr -s ' ' |cut -f9 -d' '| tr '\n' ' ')
なぜls
、grep
、cut
、...?
awk
とfind
を使用します。
find /usr/share -maxdepth 1 -type d | awk -F/ '{printf "%s ",$NF} END {print ""}'
指定されたディレクトリのすべてのサブディレクトリのリストを出力するコマンドのパイプシーケンスを記述し、新しい行に続いて1行で出力します。
そのためにコマンドのパイプシーケンスは必要ありません。 Bashのファイル名展開を使用できます ちなみに、そのためにはコマンドのパイプシーケンスが必要になります。これは、末尾の「/」を印刷したくないようだからです。
echo */ | tr -d '/'
echo */
:*/
を出力します。これは、/
で終わる現在の作業ディレクトリ内の任意のフォルダー/ファイルに展開されるグロビングパターンです(したがって、フォルダーのみ)。tr -d '/'
:末尾の「/」を削除します。 「/」はファイル名に有効な文字ではないため、ファイル名に「/」が表示される心配はありません。% mkdir dir{1..3}
% touch file{1..3}
% tree
.
├── dir1
├── dir2
├── dir3
├── file1
├── file2
└── file3
3 directories, 3 files
% echo */ | tr -d '/'
dir1 dir2 dir3
%