【问题标题】:Directory as command line argument without using full path name in linux目录作为命令行参数而不在linux中使用完整路径名
【发布时间】:2018-07-05 18:49:58
【问题描述】:

如何从当前目录 -ls 另一个目录的内容而不将另一个目录的完整路径列为命令行参数?我还需要按大小对目录的内容进行排序,只输出大小和名称。例如,我有以下名为 script.sh 的 shell 脚本:

#!/bin/bash
ls -lS $1 | awk '{print $5, $9}'

-lS 按大小列出文件,而 awk 仅打印大小和文件名作为输出。 $1 是命令行参数,但现在,它只能接受目录的完整路径才能使其工作。例如,我有一个目录,其路径为/accounts/documents/folder/directory1

要调用这个脚本,我必须输入$ script.sh /accounts/documents/folder/directory1 才能让它工作。我可以在我的脚本中更改什么内容,以便在命令行中,我只需输入$ script.sh directory1 就可以了?

感谢任何帮助!

【问题讨论】:

  • 如果系统上有多个directory1,脚本应该做什么?应该使用哪一个?
  • 我想我只是假设只有一个目录1,就像我说的使用完整路径有效,但我只是想知道是否可以只使用目录名称。
  • @kelp99 script.sh directory1 如果您首先使用 cd /accounts/documents/folder,则可以使用。从当前目录接受绝对路径和相对路径是所有 unix 工具和系统调用的工作方式。如果您希望您的工具具有在文件系统中搜索给定名称的非标准行为,您必须自己编写代码(可能使用find
  • 在整个文件系统中搜索具有该名称的目录会很慢。

标签: bash shell command-line


【解决方案1】:

假设您要查找的目录始终是子目录,则以下脚本应该可以工作:

#!/bin/bash
for FILE  in `find . -name "$1" `
do
    if [ -d $FILE ]
    then
        ls -lS $FILE | awk '{print $5, $9}'
    fi
done

【讨论】:

    猜你喜欢
    • 2013-12-07
    • 2020-12-30
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多