Если Вы рассматриваете файл как ряд строк, и файлы отсортированы, существует comm
.
Если Вы рассматриваете файл как (много) набор строк, и строки не отсортированы, grep
может сделать различие и пересечение (оно достигает разности множеств и пересечения, но не уважает счет для мультимножеств). Объединение справедливо cat
.
grep -xF -f small large >intersection
grep -vxF -f small large >difference
cat small large >union
Утилита, о которой можно думать, namei
команда. Согласно странице руководства:
Namei использует свои аргументы в качестве путей к любому типу файла Unix (символьные ссылки, файлы, каталоги, и т.д). Namei затем следует за каждым путем, пока терминальная точка не найдена (файл, каталог, символьное устройство, и т.д.). Если это находит символьную ссылку, мы показываем ссылку и запускаемся следующий за нею, располагая вывод с отступом для показа контекста.
Вывод, которого Вы требуете, может быть получен следующим образом:
$ namei -l /usr/src/linux-headers-2.6.35-22/include/
f: /usr/src/linux-headers-2.6.35-22/include/
drwxr-xr-x root root /
drwxr-xr-x root root usr
drwxrwsr-x root src src
drwxr-xr-x root root linux-headers-2.6.35-22
drwxr-xr-x root root include
namei
команда является частью linux-util-ng пакета программного обеспечения. Дополнительную информацию см. в странице руководства.
Я не знаю ни о каких командах, но довольно легко записать сценарий:
#!/bin/bash
ARG=$1
while [[ "$ARG" != "." && "$ARG" != "/" ]]
do
ls -ld -- "$ARG"
ARG=`dirname -- "$ARG"`
done
Пример:
$ perms.sh /tmp/1/2/3/hello.txt
-rw-rw-r-- 1 user group 0 Jan 14 16:59 /tmp/1/2/3/hello.txt
drwxrwxr-x 2 user group 4096 Jan 14 16:59 /tmp/1/2/3
drwxrwxr-x 3 user group 4096 Jan 14 16:43 /tmp/1/2
drwxrwxr-x 3 user group 4096 Jan 14 16:43 /tmp/1
drwxrwxrwt 12 root root 4096 Jan 14 17:02 /tmp
Как насчет рекурсивного удара функционируют для забавного решения:
[bash#] function uptree { ( \ls -ld -- "$PWD"; [ "$PWD" = '/' ] && return; cd ..; uptree ) | column -t ; }
[bash#] pwd
/home/frielp/bin/dev
[bash#] uptree
drwxrwxr-x. 2 frielp frielp 4096 Dec 14 14:50 /home/frielp/bin/dev
drwxr-xr-x. 15 frielp frielp 4096 Aug 23 10:48 /home/frielp/bin
drwxr-xr-x. 60 frielp frielp 4096 Jan 14 16:48 /home/frielp
drwxr-xr-x. 4 root root 4096 Dec 1 09:14 /home
dr-xr-xr-x. 23 root root 4096 Jan 14 08:18 /
[bash#] pwd
/home/frielp/bin/dev
[bash#]
cd .. >/dev/null
хотя для тех из нас с a $CDPATH
набор (который заставляет CD производить текущий dir, когда он используется и это вмешивается в вывод от Вашей функции.)
– beporter
04.06.2014, 20:03
Это могло легко быть сделано остротой. Это не рекурсивно и должно быть относительно быстрым способом сделать это в ударе. Вызов pwd в каждом цикле не особенно быстр, поэтому избегайте, если Вы можете.
#!/bin/bash
if [ -n "$1" ]; then
echo "Usage: $0 [FILE]"
exit 1
fi
cd -P -- "$1"
IFS="/"
set -f # turn off globbing for the expansion of $PWD below
for dir in $PWD; do
stat -c "$PWD %A" .
cd ..
done
Альтернатива, острота для текущего каталога.
(IFS="/"; set -f; for dir in $PWD; do stat -c "$PWD %A" .; cd ..; done)
set -f
выключить globbing. cd -P
следует за всеми символьными ссылками.
– Gilles 'SO- stop being evil'
16.01.2011, 03:19
Я думаю команда Вы, где поиск:
namei -l `pwd`
который при выполнении в/tmp/foo/bar дает Вам список как:
drwxr-xr-x root root /
drwxrwxrwt root root tmp
drwxr-xr-x user group foo
drwxr-xr-x user group bar
, в качестве альтернативы рассмотрите возможность использования find
с tac
find /path -printf '%M %u %g %p\n' | tac
namei -l $PWD/public_html/
От Вашего текущего dir нас $PWD для получения списка перманента до текущего dir – nelaaro 22.02.2015, 15:27