![如何根据扩展名查找和复制文件?](https://linux22.com/image/108802/%E5%A6%82%E4%BD%95%E6%A0%B9%E6%8D%AE%E6%89%A9%E5%B1%95%E5%90%8D%E6%9F%A5%E6%89%BE%E5%92%8C%E5%A4%8D%E5%88%B6%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我有一个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>
可以找到文件并将其复制到每个扩展目录的命令是什么?
答案1
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 {} +
答案2
答案3
除了@user218374之外还有mkdir -p。
photorec='/media/TiloDataRecoveryRAW'
photorecorg='/media//TiloDataRecoveryOrg'
cd "$photorec" && \
EXTDIR="$photorecorg" find . -type f -name '*.?*' -exec sh -c '
for f
do
dest=${EXTDIR}/${f##*.}
mkdir -p "$dest" && cp -p "$f" "$dest/."
done
' x {} +