Find
如何根據副檔名查找和復製文件?
我有一個
photorec
來自數據恢復過程的文件夾,其中包含 2481 個包含已恢復文件的文件夾。文件夾名稱的順序為 recup_dir.1、recup_dir.2 … recup_dir.2481
我使用以下命令獲得了這些文件夾中所有副檔名的列表:
find . -type f | perl -ne 'print $1 if m/\.([^.\/]+)$/' | sort -u
因此,我創建了另一個目錄
photorecorg
,其中包含與使用上述命令獲得的每個副檔名相對應的文件夾列表:mkdir 7z arj asf avi bat blend bmp bz2 cdr DOC docx flac flv gif gz html jpg mobi mov mp3 mp4 mpg ods odt ogg pdf php png ppt ps psd rar rtf svg swf tar tif ttf wav wmf xcf xls xlsx xz zip
現在我需要將文件
photorec
夾中的文件複製到以下擴展文件夾中photorecorg
:我想像
find . -print | xargs cp $0 ../photorecorg/<extension>
可以找到文件並複製到每個擴展目錄的命令是什麼?
photorec='/pathto/your_photo_recovery_folder' photorecorg='/pathto/your_photo_recorg_folder' cd "$photorec" && \ EXTDIR="$photorecorg" find . -type f -name '*.?*' -exec sh -c ' for f do dest=${EXTDIR}/${f##*.} cp -p "$f" "$dest/." done ' x {} +
執行zsh。放入
autoload zmv
您的~/.zshrc
(或者,要嘗試一下,在 zsh 命令行上輸入)。然後您可以使用該zmv
功能移動或複製文件。mv -Q '**/*(.)' '$f:e/$f:t'
說明:第一個操作數是要移動的文件模式,第二個是替換模式。
**/
遞歸匹配子目錄中的文件。(.)
是一個glob 限定符,它將匹配限制為正常文件(因此我們不會冒險匹配目錄)。在替換模式中,$f
指定原始路徑,修飾符e
僅保留副檔名,並t
保留完整的基本名稱。