Я хочу перечислить абсолютный путь всех папок в данном пути, используя сценарий оболочки.
Что я пробовал это:
ls -l /var/www/temp
Но я не мог найти вариант для ls
команда, которая будет перечислять абсолютный путь.
Я нашел связанный вопрос в StackOverflow: Как перечислить полные пути к папкам внутри каталога в Linux?
Но то, что мне нужно, в одной команде, мне нужно перечислить все папки по указанному пути (этот путь меняется) с их абсолютным путем.
Может ли кто-нибудь помочь мне сделать это? Заранее спасибо.
Это поможет, но не используетLS»
Вы можете использовать замену pwd на find.
find /var/www/temp -type d
Но имейте в виду, что это будет вывод списка на экран.
Как насчет функции оболочки?
dabspath () {
if [ -d "$1" ]
then
cd "$1"find "$PWD" -type d
cd "$OLDPWD"else
echo "$0: $1: No such directory"fi
}
Использование: dabspath foo
Если foo является каталогом относительно текущего рабочего каталога, то он напечатает абсолютный путь к foo и любым подкаталогам.
for D in `find . -maxdepth 1 -type d`; do echo $PWD${D#.}; done
Как это устроено:
Примечание. Поскольку каждый каталог имеет жесткую ссылку на себя (подкаталог «.»), Он также напечатает путь к рабочему каталогу.
В этом сценарии перечислены все каталоги или, опционально, все типы, распознаваемые -type T
вариант find
, По умолчанию, если аргументы не предоставлены, в нем перечислены все каталоги в текущем каталоге. Чтобы перечислить абсолютные пути, передайте абсолютный путь в качестве целевого каталога.
#!/bin/bash
# usage: ${0} [-type [fd]] [-l] <directory>
_TYPE="d" # if f, list only files, if d, list only directories
let _long=0
let _typeflag=0
# collect dirs and files
DIRS=( ) ; FILS=( )
for A in "$@" ; do
if [ $_typeflag -eq 1 ]; then
_TYPE=$A
let _typeflag=0
elif [ -d "$A" ]; then
DIRS=( ${DIRS[@]} "$A" )
elif [ -f "$A" ]; then
FILS=( ${FILS[@]} "$A" )
else
case "$A" in
"-type") let _typeflag=1 ;;
"-l") let _long=1 ;;
*) echo "not a directory: [$A]" 1>&2
exit 1
;;
esac
fi
done
# list files in current dir, if nothing specified
[ ${#DIRS[@]} -eq 0 ] && DIRS=( "$(pwd -P)" )
if [ $_long -eq 0 ]; then
find ${DIRS[@]} -maxdepth 1 -type $_TYPE | while read F ; do
if [[ "$F" != "." && "$F" != ".." ]]; then
echo "\"$F\""fi
done | xargs ls -ltrad --time-style=long-iso | sed 's#.*:[0-9][0-9] ##'
else
find ${DIRS[@]} -maxdepth 1 -type $_TYPE | while read F ; do
echo "\"$F\""done | xargs ls -ltrad --time-style=long-iso
fi