Command-Line

在 find 命令的基本名稱上執行

  • May 31, 2012

假設我有一個目錄結構如下

test
test/a
test/b

現在我想執行一個命令,這樣.我就可以在文件夾中對文件的基本名稱ab.

所以基本上,我想要這樣的東西,我天真地嘗試過

find test -type f -exec touch `basename {}` \;

只是,這不會導致空文件ab父目錄。假設我的 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

使用帶空格的文件名進行測試。

引用自:https://unix.stackexchange.com/questions/39654