Ber*_*ard 4 command-line find basename
假设我有一个目录结构如下
test
test/a
test/b
Run Code Online (Sandbox Code Playgroud)
现在我想执行一个命令,这样.
我就可以在文件夹中对文件的基本名称a
和b
.
所以基本上,我想要这样的东西,我天真地尝试过
find test -type f -exec touch `basename {}` \;
Run Code Online (Sandbox Code Playgroud)
只是,这不会导致空文件a
和b
父目录。假设我的 touch 命令只能接受一个参数。
这将导致这样的目录结构
a
b
test
test/a
test/b
Run Code Online (Sandbox Code Playgroud)
我知道如何在 bash 脚本中执行此操作,但我对单命令解决方案感兴趣。
执行 bash。
find ... -exec bash -c 'touch "${1##*/}"' btouch {} \;
Run Code Online (Sandbox Code Playgroud)
这里的${1##*/}
意思是:从以 a 结尾的第二个参数中删除最长的匹配项/
,从而保留最后一个/
.
btouch
可以是任何虚拟名称,以使其在活动进程列表中正确显示 ( ps
)