Формат NTFS был бы лучшим вариантом.
Вы можете отформатировать USB-накопитель с помощью встроенного в окно инструмента, который может находиться в меню правой кнопки мыши.
Итак, щелкните правой кнопкой мыши USB-накопитель, и это должно быть так же просто, как выбрать «формат» и выбрать «NTFS».
Если вы хотите обновить деревья каталогов с помощью другого места, лучшим инструментом будет rsync, второй вариант, возможно, tar. Написание сценария оболочки часто бывает излишним:
rsync -aP --ignore-existing Original/ Copy
Опции:
-a сообщает rsync о сохранении прав собственности, режимов и т. Д. [F6] печатает информацию о ходе [ f7] означает, что файлы, уже находящиеся в Copy, не будут затронуты. Конечная / после Original сообщает rsync копировать содержимое Original в Copy, а не копировать Original.Удалите Original, когда закончите, или используйте опцию --remove-source-files files, чтобы rsync удалял файлы, когда это делается, копируя их.
Здесь вы можете перемещать каталоги без подкаталогов.
Сначала включите рекурсивное подталкивание:
shopt -s globstar
Теперь вы можете глобализовать рекурсивно с помощью **. Вы можете отключить его с помощью shopt -u globstar, но при следующем открытии оболочки он будет выключен.
Теперь в родительском каталоге как Copy, так и Original:
[ f2]Удалите echo после тестирования, чтобы фактически переместить каталоги (и их содержимое конечно - mv не имеет флага -r)
Давайте сделаем это более читаемым
shopt -s globstar
for d in Original/**/; do
$(ls -lAq "$d" | grep -q '^d') ||
echo mv -vn -- "$d" Copy"${d/Original/}"
done
Подождите, я просто проанализировал вывод ls? Да, да. Но я думаю, что все в порядке (!), Так как я думаю, что могу положиться на последовательность вывода в этом случае. Независимо от того, какие символы содержит имя файла, вывод ls -l в каталоге, где находится этот файл, начинается со строки, которая определяет его тип и разрешения. В ls -l все списки каталогов начинаются с d, например
drwxrwxr-x 26 zanna zanna 4096 Oct 5 19:57 playground
Даже новые строки не испортили это, так как они отображаются как ? (даже после трубопровода), если мы добавим -q.
$(ls -lAq "$d" | grep -q '^d')
проверяет, что в каталоге есть некоторые подкаталоги. Вместо сбора данных из grep мы собираем статус выхода. Если команда выполнена успешно, мы ничего не делаем, но если она терпит неудачу, мы mv находим каталог (используя || или оператор, что означает, что если команда до || терпит неудачу, выполните одно за ней).
Мы используем строковые манипуляции для удаления Original, поэтому каталоги копируются в нужные места в Copy.
Вот результат:
$ tree
.
├── Copy
│ ├── Dir1
│ │ ├── Objects
│ │ └── Textures
│ ├── Dir2
│ │ ├── SubDir1
│ │ │ └── SubSubDir1
│ │ │ ├── Objects
│ │ │ └── Textures
│ │ └── SubDir2
│ │ ├── Objects
│ │ └── Textures
│ └── Dir3
│ ├── Objects
│ ├── SubDir1
│ │ ├── Objects
│ │ └── Textures
│ └── Textures
└── Original
├── Dir1
├── Dir2
│ ├── SubDir1
│ │ └── SubSubDir1
│ └── SubDir2
└── Dir3
└── SubDir1
Вот пример того, как это может сработать для вас. Обратите внимание, что этот скрипт должен запускаться на том же уровне, что и исходные и скопированные каталоги, а также, возможно, он нуждается в адаптации к вашим фактическим потребностям. Удачи.
#!/bin/bash
src="original"
dst="./copy"
function findLocation {
for i in `find $src/ -type d -name "$1"`; do
IFS='/' read -ra directories <<< "$i"
dirNum=${#directories[@]}
let "arrayNum=$dirNum-2"
arrs=()
for ((k=1 ; k<=$arrayNum; k++)); do
arrs+=("${directories[$k]}")
done
echo "===============================++++++++++++++++"
function join {
local IFS="$1"
shift
echo "$*"
}
constructDst=`join / ${arrs[@]}`
destination="$dst/$constructDst/"
if [ ! -d $destination ] ; then
mkdir -p $destination
echo "creating directory: $destination"
fi
if [ -d $i ]; then
echo "Moving $i to $destination"
mv $i -t $destination
fi
done
}
findLocation Textures
findLocation Objects
Если вы хотите обновить деревья каталогов с помощью другого места, лучшим инструментом будет rsync, второй вариант, возможно, tar. Написание сценария оболочки часто бывает излишним:
rsync -aP --ignore-existing Original/ Copy
Опции:
-a сообщает rsync о сохранении прав собственности, режимов и т. Д. [F6] печатает информацию о ходе --ignore-existing означает, что файлы, уже находящиеся в Copy, не будут затронуты. Конечная / после Original сообщает rsync копировать содержимое Original в Copy, а не копировать Original.Удалите Original, когда закончите, или используйте опцию --remove-source-files files, чтобы rsync удалял файлы, когда это делается, копируя их.
Вот пример того, как это может сработать для вас. Обратите внимание, что этот скрипт должен запускаться на том же уровне, что и исходные и скопированные каталоги, а также, возможно, он нуждается в адаптации к вашим фактическим потребностям. Удачи.
#!/bin/bash
src="original"
dst="./copy"
function findLocation {
for i in `find $src/ -type d -name "$1"`; do
IFS='/' read -ra directories <<< "$i"
dirNum=${#directories[@]}
let "arrayNum=$dirNum-2"
arrs=()
for ((k=1 ; k<=$arrayNum; k++)); do
arrs+=("${directories[$k]}")
done
echo "===============================++++++++++++++++"
function join {
local IFS="$1"
shift
echo "$*"
}
constructDst=`join / ${arrs[@]}`
destination="$dst/$constructDst/"
if [ ! -d $destination ] ; then
mkdir -p $destination
echo "creating directory: $destination"
fi
if [ -d $i ]; then
echo "Moving $i to $destination"
mv $i -t $destination
fi
done
}
findLocation Textures
findLocation Objects
Здесь вы можете перемещать каталоги без подкаталогов.
Сначала включите рекурсивное подталкивание:
shopt -s globstar
Теперь вы можете глобализовать рекурсивно с помощью **. Вы можете отключить его с помощью shopt -u globstar, но при следующем открытии оболочки он будет выключен.
Теперь в родительском каталоге как Copy, так и Original:
for d in Original/**/; do $(ls -lAq "$d" | grep -q '^d') || echo mv -vn -- "$d" Copy"${d/Original/}"; done
Удалите echo после тестирования, чтобы фактически переместить каталоги (и их содержимое конечно - mv не имеет флага -r)
Давайте сделаем это более читаемым
shopt -s globstar
for d in Original/**/; do
$(ls -lAq "$d" | grep -q '^d') ||
echo mv -vn -- "$d" Copy"${d/Original/}"
done
Подождите, я просто проанализировал вывод ls? Да, да. Но я думаю, что все в порядке (!), Так как я думаю, что могу положиться на последовательность вывода в этом случае. Независимо от того, какие символы содержит имя файла, вывод ls -l в каталоге, где находится этот файл, начинается со строки, которая определяет его тип и разрешения. В ls -l все списки каталогов начинаются с d, например
drwxrwxr-x 26 zanna zanna 4096 Oct 5 19:57 playground
Даже новые строки не испортили это, так как они отображаются как ? (даже после трубопровода), если мы добавим -q.
$(ls -lAq "$d" | grep -q '^d')
проверяет, что в каталоге есть некоторые подкаталоги. Вместо сбора данных из grep мы собираем статус выхода. Если команда выполнена успешно, мы ничего не делаем, но если она терпит неудачу, мы mv находим каталог (используя || или оператор, что означает, что если команда до || терпит неудачу, выполните одно за ней).
Мы используем строковые манипуляции для удаления Original, поэтому каталоги копируются в нужные места в Copy.
Вот результат:
$ tree
.
├── Copy
│ ├── Dir1
│ │ ├── Objects
│ │ └── Textures
│ ├── Dir2
│ │ ├── SubDir1
│ │ │ └── SubSubDir1
│ │ │ ├── Objects
│ │ │ └── Textures
│ │ └── SubDir2
│ │ ├── Objects
│ │ └── Textures
│ └── Dir3
│ ├── Objects
│ ├── SubDir1
│ │ ├── Objects
│ │ └── Textures
│ └── Textures
└── Original
├── Dir1
├── Dir2
│ ├── SubDir1
│ │ └── SubSubDir1
│ └── SubDir2
└── Dir3
└── SubDir1
Если вы хотите обновить деревья каталогов с помощью другого места, лучшим инструментом будет rsync, второй вариант, возможно, tar. Написание сценария оболочки часто бывает излишним:
rsync -aP --ignore-existing Original/ Copy
Опции:
-a сообщает rsync о сохранении прав собственности, режимов и т. Д. [F6] печатает информацию о ходе --ignore-existing означает, что файлы, уже находящиеся в Copy, не будут затронуты. Конечная / после Original сообщает rsync копировать содержимое Original в Copy, а не копировать Original.Удалите Original, когда закончите, или используйте опцию --remove-source-files files, чтобы rsync удалял файлы, когда это делается, копируя их.
Вот пример того, как это может сработать для вас. Обратите внимание, что этот скрипт должен запускаться на том же уровне, что и исходные и скопированные каталоги, а также, возможно, он нуждается в адаптации к вашим фактическим потребностям. Удачи.
#!/bin/bash
src="original"
dst="./copy"
function findLocation {
for i in `find $src/ -type d -name "$1"`; do
IFS='/' read -ra directories <<< "$i"
dirNum=${#directories[@]}
let "arrayNum=$dirNum-2"
arrs=()
for ((k=1 ; k<=$arrayNum; k++)); do
arrs+=("${directories[$k]}")
done
echo "===============================++++++++++++++++"
function join {
local IFS="$1"
shift
echo "$*"
}
constructDst=`join / ${arrs[@]}`
destination="$dst/$constructDst/"
if [ ! -d $destination ] ; then
mkdir -p $destination
echo "creating directory: $destination"
fi
if [ -d $i ]; then
echo "Moving $i to $destination"
mv $i -t $destination
fi
done
}
findLocation Textures
findLocation Objects
Здесь вы можете перемещать каталоги без подкаталогов.
Сначала включите рекурсивное подталкивание:
shopt -s globstar
Теперь вы можете глобализовать рекурсивно с помощью **. Вы можете отключить его с помощью shopt -u globstar, но при следующем открытии оболочки он будет выключен.
Теперь в родительском каталоге как Copy, так и Original:
for d in Original/**/; do $(ls -lAq "$d" | grep -q '^d') || echo mv -vn -- "$d" Copy"${d/Original/}"; done
Удалите echo после тестирования, чтобы фактически переместить каталоги (и их содержимое конечно - mv не имеет флага -r)
Давайте сделаем это более читаемым
shopt -s globstar
for d in Original/**/; do
$(ls -lAq "$d" | grep -q '^d') ||
echo mv -vn -- "$d" Copy"${d/Original/}"
done
Подождите, я просто проанализировал вывод ls? Да, да. Но я думаю, что все в порядке (!), Так как я думаю, что могу положиться на последовательность вывода в этом случае. Независимо от того, какие символы содержит имя файла, вывод ls -l в каталоге, где находится этот файл, начинается со строки, которая определяет его тип и разрешения. В ls -l все списки каталогов начинаются с d, например
drwxrwxr-x 26 zanna zanna 4096 Oct 5 19:57 playground
Даже новые строки не испортили это, так как они отображаются как ? (даже после трубопровода), если мы добавим -q.
$(ls -lAq "$d" | grep -q '^d')
проверяет, что в каталоге есть некоторые подкаталоги. Вместо сбора данных из grep мы собираем статус выхода. Если команда выполнена успешно, мы ничего не делаем, но если она терпит неудачу, мы mv находим каталог (используя || или оператор, что означает, что если команда до || терпит неудачу, выполните одно за ней).
Мы используем строковые манипуляции для удаления Original, поэтому каталоги копируются в нужные места в Copy.
Вот результат:
$ tree
.
├── Copy
│ ├── Dir1
│ │ ├── Objects
│ │ └── Textures
│ ├── Dir2
│ │ ├── SubDir1
│ │ │ └── SubSubDir1
│ │ │ ├── Objects
│ │ │ └── Textures
│ │ └── SubDir2
│ │ ├── Objects
│ │ └── Textures
│ └── Dir3
│ ├── Objects
│ ├── SubDir1
│ │ ├── Objects
│ │ └── Textures
│ └── Textures
└── Original
├── Dir1
├── Dir2
│ ├── SubDir1
│ │ └── SubSubDir1
│ └── SubDir2
└── Dir3
└── SubDir1