我正在使用for loop诸如
for j in ls ${folder}/*
Run Code Online (Sandbox Code Playgroud)
获取我的目录 ( $folder) 中的所有子文件夹。
但我只想要子目录的名称并想删除目录结构。我xargs basenme在处理文件时使用,但这不适用于目录。
您可以获得(正好是一级子目录)中所有文件夹的列表:
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)