Я хочу записать переданную по каналу последовательность команд, которая распечатывает список всех подкаталогов данного каталога, и распечатанный в одной строке, после новой строки.
Я испытываю затруднения для создания вывода из следующей команды, чтобы быть всеми в той же строке и затем иметь новую строку в конце.
Это - моя команда канала:
ls -l /share/ |grep ^d |tr -s ' ' |cut -f9 -d' '| tr '\n' ' '
И я хотел бы, чтобы вывод был как:
file1 file3
[user@linux]$
И не (что я на самом деле получаю:
file1 file3[user@linux]$
Что относительно:
ls -l $/share/ |grep ^d |tr -s ' ' |cut -f9 -d' '| tr '\n' ' ' && echo " "
Кажется, что Вы хотите получить только имена каталогов, раз так Вы можете использовать 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
, grep
, cut
...?
Использование awk
и find
:
find /usr/share -maxdepth 1 -type d | awk -F/ '{printf "%s ",$NF} END {print ""}'
я хочу написать перекачанную по трубопроводу последовательность команд, которая распечатывает список всех подкаталогов данного справочника, и напечатанный в одной линии, после новой линии.
Иоу не нуждаются в перекачанной по трубопроводу последовательности команды для этого; Вы можете использовать расширение имени файла Удара Случайно, Вам будет нужна перекачанная по трубопроводу последовательность команд для этого, так как, по-видимому, Вы не хотите печатать перемещение «/»:
echo */ | tr -d '/'
echo */
: отпечатки */
, который является globbing образцом, который расширен до любой папки / файл в текущем рабочем справочнике, заканчивающемся /
(таким образом только к папкам); 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
%
Самое простое решение состояло бы в том, чтобы просто добавить равнину 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' ' ')