1

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

A\1.txt
A\2.txt
A\3.txt

B\2.txt
B\4.txt

... Я хотел бы удалить все файлы в A которые также существуют в B (без рекурсии, и мне нужно только сравнить имена файлов).

Результат должен быть:

A\1.txt
A\3.txt

(ничего не изменилось в B\)

Целевой ОС является Windows - либо командная строка, либо инструмент с графическим интерфейсом. Я также в порядке с подходом командной строки UNIX - у меня установлен GnuWin32.

1 ответ1

4

Создайте список файлов в B\, замените B\ на A\ и удалите их.

/bin/ls -1 B/ | xargs -I {} echo rm A/{}

уберите эхо, как только оно у вас будет. Например:

$ ls A/
1 2 3
$ ls B/
1 2 
$ /bin/ls -1 B/ | xargs -I {} echo rm A/{}
rm A/1
rm A/2

Если у вас много файлов, я предлагаю сделать что-то похожее на

#!/bin/sh
for f in `ls -1 B/*`
do rm A/$f
done

Убедиться, что файлы с пробелами и работой с управляющими символами оставлены в качестве упражнения для читателя ^ _-

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .