От Linus Torvalds: "Программное обеспечение похоже на пол: лучше, когда это свободно".
Хорошо, это - в основном то же как ответ klapauciu. (И это не возместит ущерба, нанесенного если cp
перезаписал некоторые существующие файлы.)
Принятие Вас находится в исходном каталоге (в dir
). Эта команда:
find . -type f echo '{}' ';'
перечислит все файлы (рекурсивно) существующие в Вашем dir
каталог (вполне как -print
). -type f
опция там для предотвращения списка подкаталогов.
Так, если Вы используете:
find dir -type f -exec echo '../../../{}' ';'
Это должно перечислить соответствующие файлы (копии) в целевом каталоге.
Теперь, если список будет корректен, то Вы сможете удалить использование копий:
find dir -type f -exec rm -- '../../../{}' ';'
Что касается сокращения остающихся пустых каталогов, которые прибывают из cp
… гудят …
Использовать find
в сочетании с -exec
. Лучший тест с ls
прежде как это:
find . -name "*" -exec ls ../../{} \;
.
(скопированный dir), это видит, являются ли это также два каталога? Для удаления их, я использую rm
вместо ls
?
– n0pe
31.08.2011, 15:24
Следующий код обрабатывает имена файлов, которые содержат встроенные новые строки, я поместил сценарий полной версии на paste.ubuntu. Это проверяет на существование и соответствие размерам... Код для генерации данных тестирования также включен там.
# This lists the original fully-qualified filename,
# and its would-be counterpart (assuming it exists)
unset a i
while IFS= read -r -d $'\0' relf; do
printf "%s\n$s" "$PWD${relf:1}" "$(dirname "$(dirname "$PWD")")${relf:1}"
done < <(find . -type f \! -name '.' -name '*' -print0)
Вот демонстрационный вывод (упомянутой выше) полной версии, где один файл отсутствует, и у другого есть другой размер файла к оригиналу
WARNING -----
NOT in target ./file1
ok --------
sizes match ./c/file4-in-subdir
WARNING ------
size mis-match ./file3 is triple-spaced
ok --------
sizes match ./file2
has newline!
echo
метод для проверения имен файлов дважды сначала. Однако я должен изменитьсяdir
кому:.
или иначе это, кажется, не работает. Кроме того, это только перечисляет файлы вdir
, не те также в../..
– n0pe 31.08.2011, 16:11echo
метод для проверения имен файлов дважды сначала. Однако я должен изменитьсяdir
кому:.
или иначе это, кажется, не работает. Кроме того, это только перечисляет файлы вdir
, не те также в../..
---------121 А-ч--------93506----да, я запутался Вашим описанием. Почему сделалcp
скопировать содержание а не каталог в этом случае? А-ч – Stéphane Gimenez 31.08.2011, 16:16/
! – Stéphane Gimenez 31.08.2011, 16:24./dir/
? Если это было./dir
вместо этого? – n0pe 31.08.2011, 16:27cp
версии это кажется … Шахтой (coreutils 8.12), больше не имеют этого поведения. (Это иногда было полезно.) – Stéphane Gimenez 31.08.2011, 16:31