
我在這樣的位置有大量文件:
C:/Users/(Username)/Desktop/(Parent-Collection name)/(filename1)/(filename1).ext
.../(filename2)/(filename2).ext
.../(filename3)/(filename3).ext
我正在嘗試將.ext
文件批量移動到父資料夾,因此它是:
C:/Users/(Username)/Desktop/(Parent-Collection name)/(filename1).ext
從本質上消除了對子資料夾的需要,就像從學校活頁夾中取出分隔線一樣。
答案1
你可能需要這樣做西格溫,我會推薦給任何(仍然?)運行 M$ Windoze 間諜軟體的人。
像這樣的東西應該要有效。在目錄中執行它C:/Users/(Username)/Desktop/(Parent-Collection name)/
(在 cygwin 中稱為/cygdrive/c/Users/(Username)/Desktop/(Parent-Collection name)/)
:
for i in `find . -name "*" -type f`;
do mv $i `echo $i | sed 's/.*\/\([^/]*\)/\1/'`;
done
這會將下面所有目錄中的所有檔案移動(Parent-Collection name)
到(Parent-Collection name)
.具體來說,這是一個do
循環,索引i
從當前目錄開始循環遍歷每個檔案。這就是find
命令列出的內容。您可以透過運行來查找語法man find
。然後您執行的操作是將mv
檔案 ( ) 移動 ( $i
) 到新位置。此新位置由echo $i
透過串流編輯器(sed
您可以使用 進行查找)運行的原始檔案名稱 ( ) 指定,串流編輯man sed
器設定為剝離路徑,保留基本檔案名稱。
我建議對其進行測試(建立一個包含幾個子目錄的目錄,其中包含一些空白文字檔案或其他內容)並確保有備份!
然後,您可能想要刪除目前目錄下的所有(現在為空)目錄:
for i in `find . -name "*" -type d`;
do rmdir $i;
done
這裡唯一不同的是,您要find
尋找目錄 ( -type d
) 而不是檔案 ( -type f
),然後刪除這些目錄(rmdir
,僅適用於空目錄)。
linux不是很酷嗎? Cygwin 為您提供了 Linux 的一些強大功能,並且可能是讓您足夠熟悉它的第一步,有一天您甚至可能會發現它可以遷移到 Ubuntu 之類的東西。 :)
答案2
這可以使用 Powershell 來完成,儘管我們不知道您使用的是哪個版本的 Windows。
$sourcefolder = "C:\Users\username\Desktop\ParentCollectionName"
$allfiles = Get-ChildItem -Recurse $sourcefolder | Where-Object {$_.PSIScontainer -eq $false}
ForEach ($file in $allfiles)
{
$destinationfolder = Split-Path -Parent $file.Directory.FullName
Move-Item $file.FullName $destinationfolder
}
子目錄中的所有檔案$sourcefolder
都會移動到該ParrentCollectionName
資料夾中。然後您可以刪除空的子資料夾。