如何使用基本的 Bash 命令和脚本在目录树的最深层命名一个随机文件?
我正在寻找一种方法,将其作为单行且没有函数来完成。还假设我从当前目录开始,然后朝着深度工作。
find
,grep
,sed
和awk
是可接受的命令。
我目前的尝试看起来像这样并且不起作用:
查找类型 d | 声明 COUNT=-1; 声明 P=""; 在阅读 LINE 时;做回声 $LINE; 声明C;C=$(echo $LINE | cut -c3- | sed "s/\//\n\//g" | grep '/' -c); 回声 $C; 如果 [ $COUNT -gt $C ]; 然后让 COUNT=$C; 让 P=$LINE; echo "完成"; fi; 完毕
这只会找到目录。
如何以最简单的方式解决这个问题?
Joh*_*web 10
这是一个奇怪的要求!
我会使用find
+awk
在最深的目录中抓取一个文件:
bash-3.2$ deepest=$(find / -type f | awk -F'/' 'NF > depth {
> depth = NF;
> deepest = $0;
> }
>
> END {
> print deepest;
> }')
Run Code Online (Sandbox Code Playgroud)
${deepest}
在您的mv
命令中使用作为练习,但以下五行可以帮助您进一步:
bash-3.2$ echo "${deepest}"
/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Argentina/Buenos_Aires.rb
bash-3.2$ echo "${deepest%.*}"
/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Argentina/Buenos_Aires
bash-3.2$ echo "${deepest%/*}"
/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/vendor/tzinfo-0.3.12/tzinfo/definitions/America/Argentina
bash-3.2$ echo "${deepest##*/}"
Buenos_Aires.rb
bash-3.2$ echo "${deepest##*.}"
rb
Run Code Online (Sandbox Code Playgroud)
find -type d
[...]“这只会找到目录。 [...]如何以最简单的方式解决这个问题?”。
通过提供-type f
tofind
来查找所有文件( f
),而不是所有目录( d
)。