Command-Line
在 find 命令的基本名稱上執行
假設我有一個目錄結構如下
test test/a test/b
現在我想執行一個命令,這樣
.
我就可以在文件夾中對文件的基本名稱a
和b
.所以基本上,我想要這樣的東西,我天真地嘗試過
find test -type f -exec touch `basename {}` \;
只是,這不會導致空文件
a
和b
父目錄。假設我的 touch 命令只能接受一個參數。這將導致這樣的目錄結構
a b test test/a test/b
我知道如何在 bash 腳本中執行此操作,但我對單命令解決方案感興趣。
執行 bash。
find ... -exec bash -c 'touch "${1##*/}"' btouch {} \;
這裡
${1##*/}
的意思是:從以 a 結尾的第二個參數中刪除最長的匹配/
,從而保留最後一個之後的所有內容/
。
btouch
可以是任何虛擬名稱,以使其正確顯示在活動程序列表中 (ps
)
嘗試這個需要您自擔風險:
find test -type f -exec echo touch \"\$\(basename "'{}'"\)\" \; | bash
使用帶空格的文件名進行測試。