2016-09-01 7 views
2

Я пытаюсь удалить файлы с /Dir1, которых нет в /Dir2. Проблема в том, что первые несколько символов совпадают, но не последние несколько. Например.Удалить файл, если конечные символы не совпадают

/Dir1 
abc_def.png 
xyz_xyz.png 

/Dir2 
abc_ghi.png 

Так до тех пор, как «ABC» матчи, я не хочу, чтобы удалить файл, даже если последние несколько символов различны. Единственный файл, который я хочу удалить, - xyz.png, потому что его нет в /Dir2. Как мне это сделать?

+2

Что делать, если '/ Dir2' имел вместо этого файл' ghi_abc.png'? Будет ли 'abc_def.png' в'/Dir1' не удаляться? –

+0

Правильно, он не будет удален. Я хочу, чтобы он зависел от первых трех символов. – kkd92

+0

Зависит ли вы от первой части имени файла перед подчеркиванием для файлов в '/ Dir1'? –

ответ

1

Предполагая, что вы хотите, чтобы соответствовать часть файла перед первым подчеркиванием (как в вашем примере), вы можете использовать этот код:

cd /Dir1 

for f in *_*; do 
    [[ -f /Dir2/"${f%%_*}"* ]] || echo rm "$f" 
done 

После удовлетворенный, удалите echo перед тем rm.

+0

Что представляет собой 'd %%'? Это как заполнитель для любых персонажей? – kkd92

+0

'$ {f %% _ *}' удаляет самую длинную часть после первого подчеркивания от '$ f' – anubhava

+0

Нет, это в итоге отразилось на всех файлах. – kkd92