是否有一行指令可以使 chmod 互動?

是否有一行指令可以使 chmod 互動?

我正在尋找類似的東西:

ls | ask_yes_no_for_each_file | chmod +x the_files_approved

或類似的語法。

也可以處理您需要單獨確認的其他命令。

答案1

這就是您正在尋找的:

find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x

這通常find不是ls因為,解析ls輸出不可靠。然而,這種形式使用find,可以處理檔案名,即使它們包含換行符或其他困難字元。

解釋

  • find . -maxdepth 1 -type f -print0

    這將選擇文件。這可以使用 find 的許多選項中的任何一個來自訂。此選項print0指示find列印以空分隔的清單中的檔案名稱。這是傳輸檔案名稱清單的唯一可靠方法。

  • xargs -L1 -p0 chmod +x

    這將取得由 產生的以空分隔的檔案名稱列表,find並將命令套用至它們。

-L1選項指示xargs一次僅處理一個檔案名稱。該-p選項指示xargs在繼續之前提示批准。此-0選項指示xargs使用空字元作為檔案名稱之間的分隔符號。

[我不知道這個-p選項,xargs直到 @kwan 指出。

答案2

您可以使用xargs

例如:

ls|xargs -I path -p chmod +x path

選項-p提示使用者是否執行每個命令列並從終端機讀取一行。僅當回應以“y”或“Y”開頭時才運行命令列。

相關內容