首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
V2EX  ›  Linux

如何把输出结果(可以部分内容)作为重定向文件的文件名

  •  
  •   Alife · 2016-03-16 17:02:31 +08:00 · 2469 次点击
    这是一个创建于 1360 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在用 winscp ,想使用 自定义命令 来查看选中的目录大小(包含子目录)
    主要是 winscp 自带的计算速度太慢

    假如有目录 aaa,执行 du -sh aaa 输出 652K aaa
    我添加了一个自定义命令 du -sh "!" > "!"-size.txt
    执行后,当前目录下生成 aaa-size.txt 内容为 652K aaa

    有没有什么方法可以把输出结果作为重定向文件的文件名
    如上述命名生成的文件名直接为 aaa-size-652K.txt

    google 搜索了半天,没搜出来,可能关键字不对.

    9 回复  |  直到 2016-03-16 19:05:41 +08:00
        1
    Strikeactor   2016-03-16 17:10:36 +08:00
    先把输出赋值给变量,然后在创建文件时使用变量呗
        2
    Alife   2016-03-16 17:17:03 +08:00
    @Strikeactor 谢谢回答先. 好像可以,我去试试先
        3
    Counter   2016-03-16 17:24:13 +08:00
    这样喵?
    touch $(du -sh aaa | cut -d " " -f 2)-size-$(du -sh aaa | cut -d " " -f 1).txt
        4
    Alife   2016-03-16 17:33:52 +08:00
    @Counter 这个好,但是会生成三个文件 aaa.txt, 652K, aaa-size-652K 求完美
        5
    Counter   2016-03-16 17:42:19 +08:00   ♥ 1
    @Alife 可能是跟 du -sh aaa 的输出有关,假设输出是 652K aaa ,作为测试
    命令 touch $(du -sh aaa | cut -d " " -f 2)-size-$(du -sh aaa | cut -d " " -f 1).txt
    等同于 touch $(echo 652K aaa | cut -d " " -f 2)-size-$(echo 652K aaa | cut -d " " -f 1).txt
    建议研究下 du -sh aaa 的输出
        6
    xujif   2016-03-16 17:50:51 +08:00   ♥ 1
    du -sh * | awk '{print $2"-size-"$1".txt"}' | xargs -i touch {}
        7
    Alife   2016-03-16 18:21:21 +08:00
    @Counter 好了,输出的内容中间是个 tab 不是空格, cut 后面改成 tab 就好了
        8
    Alife   2016-03-16 18:22:18 +08:00
    好了,谢谢大家,结贴
        9
    Counter   2016-03-16 19:05:41 +08:00 via iPhone
    @Alife 其实更推荐 6 楼的方法,同样的
    touch $(du -sh aaa | awk '{print $2"-size-"$1".txt"}')
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1882 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 01:23 · PVG 09:23 · LAX 17:23 · JFK 20:23
    ♥ Do have faith in what you're doing.