Как найти и скопировать файлы на основе расширения?

команда разворачивания "xvf" работает только для отдельных файлов

, что делает необходимым использование цикла :

for file in ./*.tar; do tar xvf "$file"; done
1
03.04.2017, 03:39
3 ответа

Запустите zsh . Поместите автозагрузку zmv в ваш ~ / .zshrc (или, чтобы попробовать, введите это в командной строке zsh). Затем вы можете использовать функцию zmv для перемещения или копирования файлов.

mv -Q '**/*(.)' '$f:e/$f:t'

Объяснение: первый операнд - это шаблон файлов для перемещения, второй - шаблон замены. ** / рекурсивно сопоставляет файлы в подкаталогах. (.) - квалификатор glob , он ограничивает совпадения обычными файлами (поэтому мы не рискуем сопоставить каталоги). В шаблоне замены $ f обозначает исходный путь, модификатор e сохраняет только расширение, а t сохраняет полное базовое имя.

2
27.01.2020, 23:24
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
27.01.2020, 23:24

дополнительно к @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 {} +
1
01.08.2020, 22:34

Теги

Похожие вопросы