xargs
преобразовывает вход к аргументам. -I
опция указывает строку, которая будет использоваться в качестве заполнителя для аргумента. Поэтому, если конвейер производит что-то как
file1
file2
затем xargs
строка преобразовывает это к
cp -p file1 ../htory2/somefile.CSV
cp -p file2 ../htory2/somefile.CSV
head -1
только возвращают одна строка, тем не менее, таким образом, я не вижу реальной выгоды использования xargs
вместо, сказать
cp -p "$(ls -t1 ../htory/$filename* | head -1)" ../htory2/somefile.CSV
Кроме того, так как конечный файл всегда является тем же, он будет перезаписан последним файлом в ${files[@]}
.
Содержимое файла будет таким же. Метаданные о файле - время модификации, номер inode, разрешения и т. Д. - могут изменяться в зависимости от того, как именно вы делали копию. Этот материал хранится в файловой системе отдельно от самих файловых данных. Фактическое количество используемого пространства может измениться из-за различных накладных расходов. Но содержимое такое же, за исключением случаев, когда при передаче произошла какая-то ошибка.
Это должно быть верно независимо от того, копируете ли вы файл между устройствами или используете какой-либо инструмент для преобразования файловой системы на месте. Если файл не остался прежним, это потому, что что-то пошло не так.
Команда cmp
может сравнивать два файла побайтно, чтобы проверить это. Вы также можете использовать программу подсчета контрольных сумм, например shasum
, и сравнивать контрольные суммы. (Это не побайтно, но вероятность коллизии, когда два файла дают одинаковый результат, хотя они действительно разные, намного меньше , чем вероятность фактического сбоя оборудования, вызывающего cmp
, чтобы дать неверный результат.)