2016-08-20 4 views
0

Любые подсказки, как я могу перемещать файлы и перезаписывать их в целевом каталоге только тогда, когда целевые файлы меньше?Перемещение с перезаписью меньших файлов

Я искал какое-то решение bash, но не смог найти никого с поддержкой стандартных подстановочных знаков.

псевдокод будет выглядеть так:

WHEN mv -i is triggering prompt AND input_file_size > target_file_size: 
    mv input_file target_file 
+1

Не уверен, что вы можете легко проверить размер файла, но mv имеет переключатель '-u' для обновления, который будет сравнивать даты файлов. Будет ли это работать на вас? – Robert

+0

Я знаю о '-u', но в этом случае мне нужен размер. Например. для статических каталогов и без подстановочных знаков было бы легко «коснуться» больших файлов, а затем использовать '-u', но это также усложняет ситуацию. – null

+0

Являются ли данные, которые уже существуют в меньшем целевом файле, идентичном началу большего входного файла? – Armali

ответ

0

Bash не позволяет получить размер файла в процессе. Вы можете сделать что-то вроде

sz0=$(stat -c%s input_file) 
sz1=$(stat -c%s target_file) 
if ((sz1 < sz0)); then mv input_file target_file; fi 

, но не ожидайте Hyperspeed, если вы хотите запустить это в цикле.

+0

Это будет медленным от того, что я вижу. Я не так хорошо разбираюсь в сценариях bash, но идея с улавливанием '-i' непростой скрипта? – null

+0

Я не знаю, что вы подразумеваете под «catching' -i» – PSkocik

+0

Допустим, у меня есть 3 файла в каталоге INPUT и 1 дублируется (по имени), но меньше файлов в директории TARGET. Ваш путь проверяет размер для всех файлов, которые бессмысленны. Захват 'mv -i' - запроса перед перезаписи приведет к тому, что это произойдет только тогда, когда в обоих каталогах будут одинаковые файлы, поэтому для одного файла в INPUT и одного файла (с тем же именем) в директории TARGET. – null

Смежные вопросы