是否可以僅使用命令列使用類似cp
或rsync
命令之類的命令來爬行硬碟以僅查找圖像/視訊檔案?也許在將它們複製到另一個位置的過程中保留新位置中的資料夾名稱/路徑?
我有幾個舊硬碟驅動器,我想備份其中的圖片和視頻,但它們最多分散在數千個文件夾中,我更希望計算機為我完成大部分繁重的工作,如果在的話一切皆有可能,但我仍在學習命令列及其令人印象深刻的功能。
答案1
您可以用來find
尋找您感興趣的文件,即:
find /mnt/hd1 -name \*.jpg
將在 /mnt/hd1 目錄中尋找 jpg 檔案(好吧,對於具有 .jpg 副檔名的檔案)。如果您只想將這些文件複製到某處,您可以:
find /mnt/hd1 -name \*.jpg -exec cp {} /mnt/dest
這將為cp
它可以在 /mnt/dest 目錄中找到的每個檔案運行命令。
希望能幫助你 :)
答案2
如果您不想將其自動化到一個腳本中,另一種可能性是使用 find 命令建立 bash 腳本。然後運行 bash 腳本。這樣您也可以知道文件的來源。
另外,如果您可能懷疑您的環境中存在重複的文件名,我會稍微更改上面的內容。您需要在腳本中進行一些錯誤檢查。
您還想保留目錄路徑嗎?
即如果文件在這裡
/source/a/b/c/d/e.jpg
您想將其複製到
/dest/a/b/c/d/e.jpg ?
或者
/dest/e.jpg ?
所以一個例子可以是
find /source -type f -name "*.jpg" -print | awk '{"cp -p "$1" /backup/}' > copy.sh
這只會複製到一個目錄 /backup
為了保存,你可以這樣做
(cd /source; find . -type f -name "*.jpg" -print | awk '{"cp -p "$1" /backup/"$1}') > copy.sh
但是你想先建立所有目錄
(cd /source; find . -type d -print | awk '{print "mkdir -p /backup/"$1}' > mkdir.sh
這樣做的好處是,您還可以在實際運行命令之前查看腳本並確保一切看起來都很好。我已經運行了好幾次命令,結果…呃…意外的結果:)
另外,擁有腳本還可以記錄您將要做的事情。