
我需要編寫一個腳本,該腳本將進入目錄列表,然後將克汀檔案類型的檔案移至其他目錄中。
使用下面的程式碼,我可以迭代目錄中的所有資料夾並列印它們的名稱。我認為我需要通過 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
檔案從這些目錄複製到所需的目錄。由於我們在這裡使用絕對路徑,因此您可以從任何位置執行此腳本。