2017-07-14 39 views
0

我想通過將文件夾中的所有文件(「MySourceDir」)移回到a中指定的相應路徑來撤消移動命令。 TXT文件(「ListOfFilePaths.txt)。將多個文件從一個文件夾移動到目錄列表(撤消移動命令)

對於如:

MySourceDir 

File1.txt 
File2.txt 
File3.txt 
. 
. 
. 

我有一個包含每個這些文件的文件路徑的文本文件,表明他們在最初的目錄,因此,需要被移回

ListOfFilePaths.txt 

/path/to/dirA/File1.txt 
/path/to/dirB/File2.txt 
/path/to/dirC/File3.txt 

我可以用兩種方法做到這一點。寫一個循環爲1)grep每個文件的目錄路徑,然後將其移動到相應的grepped目錄路徑或2)從目錄路徑中刪除「File#.txt」部分,然後爲每個文件執行mv命令列表,使得第n個文件被移動到第n個目錄。

在任何一種情況下,我都不熟悉在bash中編寫循環,所以任何幫助都將非常感謝! (同樣,也希望得到一個命令複製這些文件返回到原來的文件夾,而不是移動它們,保持不變的時間戳:-))

+0

最簡單的辦法是使用一個良好的文本編輯器,提供塊選擇和多行輸入。然後,您可以簡單地將該文件轉換爲每行包含一個mv命令的腳本。你可以控制和檢查的東西。沒有循環,沒有什麼幻想,你知道你在做什麼。 – arkascha

回答

0

據我瞭解,你需要:

  • 循環通過文本文件
  • 獲取行,提取最後的斜線後面的文本(給你的文件名)
  • 從線
  • 將文件複製獲取目標目錄從源目錄到目標目錄

下面的代碼應該有所幫助:

while read line; do 
    fileName=$(basename $line) 
    dirName=$(dirname $line) 
    cp SourceDir/"$fileName" "$dirName" 
done < ListOfFilePaths.txt 

basename從提取的文件路徑名。 dirname從文件路徑中提取目錄。

參考文獻:

https://ss64.com/bash/dirname.html

https://linux.die.net/man/1/basename

+0

感謝您的建議。當我用一個測試用例嘗試它,並執行「echo fileName」而不是「cp」命令時,它會引發此錯誤: 'fileName:command not found dirName:command not found' – AHegde

+0

@AHegde那是因爲你需要執行'echo'$ fileName「;'和'echo」$ dirName「;'。 – mfisher91

相關問題