如何获取删除路径的目录的名称?

Sat*_*are 0 command-line bash

我正在使用for loop诸如

for j in ls ${folder}/*
Run Code Online (Sandbox Code Playgroud)

获取我的目录 ( $folder) 中的所有子文件夹。

但我只想要子目录的名称并想删除目录结构。我xargs basenme在处理文件时使用,但这不适用于目录。

Yar*_*ron 5

您可以获得(正好是一级子目录)中所有文件夹的列表:

find /path/to/dir -maxdepth 1 -mindepth 1 -type d
Run Code Online (Sandbox Code Playgroud)

您可以将结果通过管道传输到sed命令中,该命令将只保留目录名称(不带前缀)

find /path/to/dir -maxdepth 1 -mindepth 1 -type d -print0 | sed -z 's!.*/!!' |tr '\0' '\n'
Run Code Online (Sandbox Code Playgroud)

例子:

$ find /var -maxdepth 1 -mindepth 1  -type d 
/var/metrics
/var/lib
/var/local
/var/cache
/var/spool
/var/crash
/var/backups
/var/mail
/var/snap
/var/opt
/var/log
/var/tmp

$ find /var -maxdepth 1 -mindepth 1 -type d -print0 | sed -z 's!.*/!!' |tr '\0' '\n'
metrics
lib
local
cache
spool
crash
backups
mail
snap
opt
log
tmp
Run Code Online (Sandbox Code Playgroud)

使用for循环:

$ for i in $(find /var -maxdepth 1 -mindepth 1 -type d -print0 | sed -z 's!.*/!!' |tr '\0' '\n'); do echo $i; done
metrics
lib
local
cache
spool
crash
backups
mail
snap
opt
log
tmp
Run Code Online (Sandbox Code Playgroud)

for 循环重新排列:

$ for i in $(find /var -maxdepth 1 -mindepth 1 -type d -print0 | sed -z 's!.*/!!' |tr '\0' '\n'); 
    do 
    echo $i
  done
Run Code Online (Sandbox Code Playgroud)