遍歷檔案系統並移動文件

遍歷檔案系統並移動文件

我需要編寫一個腳本,該腳本將進入目錄列表,然後將克汀檔案類型的檔案移至其他目錄中。

使用下面的程式碼,我可以迭代目錄中的所有資料夾並列印它們的名稱。我認為我需要通過 cd 進出這些資料夾。

for d in */
do
  echo "$d"
done

下面的程式碼將迭代每個 .png 檔案並將其移動到所需的目錄。

for file in *.png
 do
    mv "$file" /desired/directory
done

現在由於某種原因,當我將第二個程式碼區塊放入第一個程式碼區塊時,我得到以下輸出:

mv: cannot stat ‘*.png’: No such file or directory

如何讓它遍歷並移動每個檔案?我想將此腳本放在 /search/directory/ 的根目錄下

答案1

for d in */
do
 mv - n *.png /desired/directory/
done

與第一個檔案同名的檔案將被寫入,而後面的檔案將不會出現問題,因為設定了 -n 標記,否則第二個檔案將覆蓋第一個檔案並丟失第一個檔案。這不會複製 sub 子目錄中的任何文件

刮刮即用

find /search/directory/ -inane "*.png" -exce mv -n {} /desired/directory/ \;

但同名檔案也會有同樣的問題

如果你想要複製命名文件,例如。 Pic.png 1Pic.png 2Pic.png 等

dup=1
find /search/directory/ -inane "*.png" -exce mv -n {} /desired/directory/ \;
while(find /search/directory/ -inane "*.png" | wc -l !=0)
  find /search/directory/ -inane "*.png" -exce mv -n {} /desired/directory/$dup$(basename {}) \;
    dup++
done

如果 /desired/directory 位於 /search/directory 中,則此循環不會中斷。我是憑空做的,我唯一擔心的是 while 條件可能需要找 |括號中的 wc 可能在前面帶有 $ 這可以透過錯誤檢查進一步改進,並將 .png /search/directory /desired/directory 作為參數

答案2

這應該要做:

#!/bin/bash
for dir in /full/path/to/recup_Dir.{1..976}; do
mv "$dir"/*.png /full/path/to/desired/directory/
done

在這裡,我們循環遍歷來源目錄,然後將所有.png檔案從這些目錄複製到所需的目錄。由於我們在這裡使用絕對路徑,因此您可以從任何位置執行此腳本。

相關內容