【问题标题】:Find command and semi-path [duplicate]查找命令和半路径[重复]
【发布时间】:2016-11-03 19:52:25
【问题描述】:
/volume1/Folder/0000/AAA/one
/volume1/Folder/0001/AAA/two
/volume1/Folder/0001/BBB/three
/volume1/Folder/0002/CCC/four
...

我想获得一个 .txt 文件,其中包含所有非空文件夹目录。但我希望这个文件在没有/volume1/Folder/ 的情况下写入,即我想这样打印它:

0000/AAA/one
0001/AAA/two
0001/BBB/three
0002/CCC/four
...

这是我正在使用的代码,但这是在编写完整路径(我知道通过添加 -printf '%f\n' 它只会写入最后一个文件夹,但我不希望这样! )

 find /volume1/Folder/* -mtime -1 -type d -maxdepth 2 -not -empty > /volume1/Folder/NotEmptyFolders.txt

有人可以帮我吗?

【问题讨论】:

    标签: bash


    【解决方案1】:

    如果您不想将输出通过管道传输到另一个命令,例如 sed,请尝试此操作

    find /volume1/Folder/* -mtime -1 -type d -maxdepth 2 -not -empty -exec bash -c 'echo ${0#/volume1/Folder/}' {} \; > /volume1/Folder/NotEmptyFolders.txt
    

    但这又会创建一个新的 shell (bash -c),而您可以执行 | 并使用 sed/awk 等其他命令删除 /volume1/Folder/

    【讨论】:

    • 酷,它有效。唯一的问题是它正在编写所有路径而不为每个路径创建新行。你知道怎么解决吗?
    • 在这种情况下,是否可以使用 sed/awk 而不是 find?
    • 在将输出重定向到文件或将所有内容分配给变量后,您是否在同一行中看到了所有内容
    • 我不确定我是否理解您的问题。我没有使用 cmd 行,我使用的是任务调度程序,所以我无法在不写入输出的情况下进行检查。使用主要文章的代码,它将所有路径都写在不同的行中,而你的不是,它们都在同一个
    • 我已更新我的更改以将输出重定向到文件(类似于您的原始代码)..检查更新代码..
    猜你喜欢
    • 2015-12-16
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 2020-07-29
    • 2012-04-07
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多