Как добавить собственный путь к: "ls -d * /" - PullRequest
2 голосов
/ 02 октября 2019

Проблема: код работает нормально, в нем перечислены папки с «числовыми именами» в обратном порядке, однако я должен был бы находиться в том же каталоге. Я хотел бы добавить собственный путь к нему, чтобы мне не нужно было находиться в одном и том же каталоге.

ls -d */ |  cut -d '/' -f 1 | sort -nr

Я попытался добавить "/test/path" в приведенный выше код, но безуспешно.

ls -d */ /test/path/ |  cut -d '/' -f 1 | sort -nr

Обновление: я не знаю, почему в этом сценарии печатается «test2» внизу. Я пользуюсь SliTaz Linux 5.0 Не могу понять версию shell.

root@s1:/# mkdir /test
root@s1:/# mkdir /test/test2
root@s1:/# cd /test/test2/
root@s1:/test/test2# mkdir 1 2 3 10
root@s1:/test/test2# touch test.txt
root@s1:/test/test2# ls -d /test/test2/*/ | awk -F'/' '{print $(NF-1)}' | sort -nr
10
3
2
1
test2
root@s1:/test/test2#

Обновление 2: На моем облачном сервере, который использует «Alpine Linux», версия «3» Я полагаю, что проблема не возникает, код работает нормально.

test:/# mkdir /test
test:/# mkdir /test/test2
test:/# cd /test/test2
test:/test/test2# mkdir 1 2 3 10
test:/test/test2# touch test.txt
test:/test/test2# ls -d /test/test2/*/ | awk -F'/' '{print $(NF-1)}' | sort -nr
10
3
2
1
test:/test/test2#

1 Ответ

0 голосов
/ 02 октября 2019
ls -d /test/path/*/ |  cut -d '/' -f 1 | sort -nr

Хотя cut не будет работать так, как вы собираетесь его использовать.

Вместо этого используйте это:

ls -d /test/path/*/ | awk -F'/' '{print $(NF-1)}' | sort -nr

Также, чтобы избежать nullglob, установите это раньше:

shopt -s nullglob

Так что если не существует никаких каталогов, это не приведет к ошибке.

Я не уверен в причине, по которой вышеприведенная команда не работает на SliTaz Linux 5.0, нокак уже говорилось, это можно сделать вместо:

cd /test/path/ ; ls -d */ | awk -F'/' '{print $(NF-1)}' | sort -nr ; cd "$OLDPWD"

или

(cd /test/path/ ; ls -d */ | awk -F'/' '{print $(NF-1)}' | sort -nr) 
...