對於Linux中的腳本編程來說是新手,所以我希望這很簡單。我需要將包含多個文件的目錄移動到另一個位置,如果該目錄包含一個帶有特定文本的文件。用於移動包含文件的目錄的Linux腳本
我有一個命令,讓我到這裏來匹配我的標準目錄的列表:
find . -name 'file.name' -print0 | xargs -0 grep -l "foo" | sed 's#\(.*\)/.*#\1#' | sort -u
現在我只需要利用這個結果,並與可執行腳本內的mv命令將它們結合起來。
對於Linux中的腳本編程來說是新手,所以我希望這很簡單。我需要將包含多個文件的目錄移動到另一個位置,如果該目錄包含一個帶有特定文本的文件。用於移動包含文件的目錄的Linux腳本
我有一個命令,讓我到這裏來匹配我的標準目錄的列表:
find . -name 'file.name' -print0 | xargs -0 grep -l "foo" | sed 's#\(.*\)/.*#\1#' | sort -u
現在我只需要利用這個結果,並與可執行腳本內的mv命令將它們結合起來。
您可以使用xargs
與替換,以獲得預期的效果:
commands to get directory list | xargs -i mv "{}" <destination>
這個最終成爲我的解決方案,因爲它可以輕鬆地處理帶有空格和特殊字符的目錄名稱,謝謝 –
假設所有的出來您發佈的管道是目錄名稱:
$target=/home/me/example
find . -name 'file.name' -print0 |
xargs -0 grep -l "foo" |
sed 's#\(.*\)/.*#\1#' |
while read line #line is a variable with the contents of one line
do
mv $line $target
done
哦,擺脫那種-u 沒有必要爲它移動的目錄和它的序列化'你的管道,你不能排序,直到發現完成,所以這些動作不會開始,沒有它的動作可以開始爲第一個項目被找到時的SOON。
真棒,完美工作,謝謝! –
好吧,它的工作,直到我的目錄有他們的名字中的空格...結束了與下面的xargs選項 –
'mv「$ line」「$ target」'但同意xargs選項在這裏更好 這雖然讀結構_can_對複雜的處理很有用,但我需要使用xargs更多 – tolanj
的backtick operator評估命令,並將就好像你進入它的命令行上stdout
。所以,在你的情況:
爲什麼sed和排序? – anubhava