我有一堆目录; 其中一些包含'.todo'文件.
/storage/BCC9F9D00663A8043F8D73369E920632/.todo
/storage/BAE9BBF30CCEF5210534E875FC80D37E/.todo
/storage/CBB46FF977EE166815A042F3DEEFB865/.todo
/storage/8ABCBF3194F5D7E97E83C4FD042AB8E7/.todo
/storage/9DB9411F403BD282B097CBF06A9687F5/.todo
/storage/99A9BA69543CD48BA4BD59594169BBAC/.todo
/storage/0B6FB65D4E46CBD8A9B1E704CFACC42E/.todo
Run Code Online (Sandbox Code Playgroud)
我想'find'命令只打印我的目录,就像这样
/storage/BCC9F9D00663A8043F8D73369E920632
/storage/BAE9BBF30CCEF5210534E875FC80D37E
/storage/CBB46FF977EE166815A042F3DEEFB865
...
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所做的,但它也列出了'.todo'文件
#!/bin/bash
STORAGEFOLDER='/storage'
find $STORAGEFOLDER -name .todo -exec ls -l {} \;
Run Code Online (Sandbox Code Playgroud)
应该是愚蠢的愚蠢,但我放弃了:(
要仅打印目录名称,请使用-printf '%h\n'.还建议使用双引号引用变量.
find "$STORAGEFOLDER" -name .todo -printf '%h\n'
Run Code Online (Sandbox Code Playgroud)
如果要处理输出:
find "$STORAGEFOLDER" -name .todo -printf '%h\n' | xargs ls -l
Run Code Online (Sandbox Code Playgroud)
或者使用带有进程替换的循环来使用变量:
while read -r DIR; do
ls -l "$DIR"
done < <(exec find "$STORAGEFOLDER" -name .todo -printf '%h\n')
Run Code Online (Sandbox Code Playgroud)
循环实际上一次处理一个目录,而在xargs中,目录ls -l一次性传递.
要确保一次只处理一个目录,请添加uniq:
find "$STORAGEFOLDER" -name .todo -printf '%h\n' | uniq | xargs ls -l
Run Code Online (Sandbox Code Playgroud)
要么
while read -r DIR; do
ls -l "$DIR"
done < <(exec find "$STORAGEFOLDER" -name .todo -printf '%h\n' | uniq)
Run Code Online (Sandbox Code Playgroud)
如果你没有bash并且你不介意保留对循环外部变量的更改,你可以使用管道:
find "$STORAGEFOLDER" -name .todo -printf '%h\n' | uniq | while read -r DIR; do
ls -l "$DIR"
done
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7173 次 |
| 最近记录: |