Можно ли автоматически добавлять имена файлов с возрастающим числовым значением при копировании множества файлов из одного каталога в другой на терминале Mac? - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь использовать однострочную команду в терминале, чтобы найти и скопировать все файлы определенного типа из одного каталога моего компьютера в другой каталог. Я могу сделать это прямо сейчас, используя следующую команду:

find ./ -name '*.fileType' -exec cp -prv '{}' '/destination_directory/' ';' 

Проблема, с которой я столкнулся, заключается в том, что если файл, который копируется, имеет то же имя, что и файл, который был ранее скопирован,он заменит ранее скопированный файл.

Чтобы исправить это, я хотел бы отредактировать мою команду таким образом, чтобы файлы были пронумерованы по мере их копирования в новый каталог.

таквывод должен выглядеть примерно так:

Исходные файлы

cat.txt dog.txt dog.txt

Скопированные файлы

cat1.txt dog2.txt dog3.txt

Редактировать:

Список команд, с которыми я могу работать, связан здесь: https://ss64.com/osx/

Специально для cp команда: https://ss64.com/osx/cp.html

-Примечание: --backup и -b недоступны (кажется) для этой версии cp

1 Ответ

0 голосов
/ 11 ноября 2019

Вы ищете параметр --backup команды cp. Например:

find ./ -name '*.fileType' -exec cp --backup=t -prv '{}' '/destination_directory/' ';'

Редактировать: Если вы застряли с MacOS cp, вы можете эмулировать поведение --backup в скрипте:

#!/bin/bash
set -e
# First parameter: source directory   
srcdir=$1
# Second parameter: destination directory
destdir=$2

# Print all filenames separated by '\0' in case you have strange
# characters in the names
find "$srcdir" -type f -print0 |
# Split the input using '\0' as separator and put the current line
# into the $file variable
while read -d $'\0' file; do
  # filename = just the name of the file, without dirs
  filename=$(basename "$file")
  # if destdir does not have a file named filename
  if [ \! -f "$destdir/$filename" ]; then
    cp -pv "$file" "$destdir/$filename";
    continue;
  fi
  # Otherwise
  suffix=1
  # Find the first suffix number that is free
  while [ -f "$destdir/$filename.$suffix" ]; do
    suffix=$(($suffix + 1))
  done
  cp -pv "$file" "$destdir/$filename.$suffix"
done 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...