编者按:这个问题是模棱两可的,因为它混淆了两个不相关的任务:
(a)使用-printf
操作打印仅仅的文件名(没有路径组件),以及
(b)通过{}
(a)在-exec
操作的上下文中传递仅仅的文件名作为参数被错误地认为是实现(b)的一种方式。
这种混淆导致至少有一个答案集中在(a)上。
我试图使用查找命令列出某个路径中的所有目录,但在输出中隐藏该路径。-printf"%P\n"标志应该隐藏 /path/to/directory/,但它不起作用:
find /path/to/directory/* -maxdepth 0 -type d -printf "%P\n" -exec sudo tar -zcpvf {}.tar.gz {} \;
例如,上面的命令将使用以下内容创建归档文件:
/path/to/directory/dir1
/path/to/directory/dir2
/path/to/directory/dir3
如何修改我的命令以输出此:
dir1
dir2
dir3
请注意:我知道我可以通过cd /path/to/directory/然后使用查找命令执行上述操作,但重要的是我要避免使用cd并使用单个查找命令执行所有操作。
由于您只处理子目录(直接子目录),因此 shell 循环可能是更简单的解决方案:
(cd "/path/to/dir" && for d in */; do sudo tar -zcpvf "${d%/}".tar.gz "$d"; done)
我知道你想避免cd
,但是通过将整个命令包含在(...)
中,它在子壳中运行,因此当前shell的工作目录保持不变。
本答案的其余部分讨论了如何使用 GNU 查找来解决问题
。
< sup > < code >-execdir 解决方案也可以与BSD/OSX find
一起使用,而且实际上会更简单。
至于让 find
的 -printf
只打印文件名,而不输出任何目录组件:使用 %f
格式说明符:
find /path/to/dir/* -maxdepth 0 -type d -printf "%f\n"
这将打印指定目录中所有直接子目录的名称。
但是,当使用-exec
操作时,打印的内容不会影响{}
>扩展到的内容:{{}
始终扩展到匹配的路径,其中始终包括指定为输入的路径组件。
但是,< code>-execdir操作可能会满足您的要求:
>
在执行指定的命令之前,它会更改为手头的目录
它将< code>{}扩展为< code >。/
因此:
find /path/to/dir -mindepth 1 -maxdepth 1 -type d -execdir sudo tar -zcpvf {}.tar.gz {} \;
警告:<code>-execdir{}仍然按原样扩展到输入路径。
因此,上面的命令没有将globing(/path/to/dir/*
)与-maxDeep 0
一起使用,而是使用/path/to/dir
并让查找
对包含的项目进行枚举,这些项目比级别1-因此-maxDeep 1
;由于输入路径本身不应包含在内,因此必须添加-minDeep 1
。
请注意,行为有细微的不同:<code>find</code>总是在枚举中包含隐藏项,而shell的globbing(<code>*</code>)默认情况下不包含。
如果<code>/ {}扩展中的code>前缀应该去掉,需要做更多的工作:
find /path/to/dir -mindepth 1 -maxdepth 1 -type d \
-execdir sh -c 'd=${1##*/}; sudo tar -zcpvf "$d".tar.gz "$d"' - {} \;
涉及shell(sh
)允许使用shell参数扩展来剥离./
前缀(${1##*/}
实际上会剥离任何路径组件)。请注意虚拟参数-
,shell将其分配给0美元
,我们对此不感兴趣;{}
然后变成shell参数1美元
。
[1]加上./
,如果输入路径本身是相对的;请注意,BSD/OSX查找
没有表现出这种怪癖:它总是将{}
扩展到仅仅是文件名,没有任何路径组件。
find /path/to/directory/* -maxdepth 0 -type d -exec basename {} \;
查找所有目录 查找 /路径/到/目录/* -最大深度 0 -类型 d
< code >-exec basename { } \; -使用find中的结果参数执行basename命令
使用 chattr 命令配置文件或目录的隐藏属性后,可以使用 lsattr 命令查看。 lsattr 命令,用于显示文件或目录的隐藏属性,其基本格式如下: [root@localhost ~]# lsattr [选项] 文件或目录名 常用选项有以下 3 种: -a:后面不带文件或目录名,表示显示所有文件和目录(包括隐藏文件和目录) -d:如果目标是目录,只会列出目录本身的隐藏属性,而不会列出所含
管理 Linux 系统中的文件和目录,除了可以设定普通权限和特殊权限外,还可以利用文件和目录具有的一些隐藏属性。 chattr 命令 ,专门用来修改文件或目录的隐藏属性,只有 root 用户可以使用。该命令的基本格式为: [root@localhost ~]# chattr [+-=] [属性] 文件或目录名 + 表示给文件或目录添加属性,- 表示移除文件或目录拥有的某些属性,= 表示给文件或目录
常用指令 - ls 显示文件或目录 -l 列出文件详细信息l(list) -a 列出当前目录下所有文件及目录,包括隐藏的a(all) ls -a 或者 ls -al mkdir 创建目录 -p 创建目录,若无父目录,则创建p(parent)(循环创建) mkdir dirname 或者 mkdir -p dirname/dirname2/dirname cd 切换目录
问题内容: 我知道命令行界面(例如Git等)能够隐藏用户的输入(对于密码有用)。有没有办法用Java编程地做到这一点?我正在从用户那里输入密码,我希望他们的输入在该特定行(而不是所有用户)上被“隐藏”。这是我的代码(尽管我怀疑这会有所帮助…) 问题答案: 尝试。不过,您至少必须运行Java 6。 请注意,这不适用于Eclipse控制台。您必须从 真实的 console / shell / term
通过学习 cd 和 pwd 命令,相信读者已经能够在庞大的 Linux 文件系统中,随心所欲地游荡并确定自己所在的位置了。本节继续来学习,如何知道某目录中存放了哪些文件或子目录。 ls 命令,list 的缩写,是最常见的目录操作命令,其主要功能是显示当前目录下的内容。此命令的基本格式为: [root@localhost ~]# ls [选项] 目录名称 表 1 列出了 ls 命令常用的选项以及各自
本文向大家介绍LINUX 查找tomcat日志关键词命令,包括了LINUX 查找tomcat日志关键词命令的使用技巧和注意事项,需要的朋友参考一下 #查询catalina.out日志文件中的关键词为2016-04-13 11:26:00的日志信息 grep -C 10 '2016-04-13 11:26:00' catalina.out |more 解释: grep :查询,筛选 -C : gre