Это, кажется мне ошибка в align.c 2.6.39 и предыдущий относительно GCC> = 4.6. Я предполагаю, что Вы основываетесь на недавнем Fedora, который имеет GCC 4.6, поскольку значение по умолчанию установило GCC. Ошибка не должна появляться использующий GCC <4.6, по моему скромному мнению.
Переменная "инструкция" объявляется на строке 704 и инициализируется для обнуления. Это затем повторно присвоено на строке 746. Этого переназначения недостаточно для подавления предупреждения gcc. Я проверил это поведение путем компиляции
int main()
{
int i = 0;
i = 4;
return 1;
}
с /usr/local/gcc-4.7.0/bin/gcc -Wall -o test test.c
и добрался
test.c:3:6: warning: variable ‘i’ set but not used [-Wunused-but-set-variable]
На переменную "инструкцию" ссылаются только в коде, который является ifdef'ed CONFIG_VSX, так, чтобы, если у Вас нет набора CONFIG_VSX затем, Вы видели эту проблему при компиляции с GCC> = 4.6. Установка CONFIG_VSX должна решить проблему. Если это не то, что Вы хотите затем установку CONFIG_PPC_DISABLE_WERROR попытки в menuconfig или используете эти инструкции помочь Вам выключить-Werror или исправить код.
Если Вы действительно исправляете код, рассматриваете представление его на kernel.org, поскольку я вижу, что эта ошибка все еще существует в 3,3
Взгляд на ответ Stephane для лучшего метода, смотрите на мой ответ по причинам не использовать более очевидные решения (и причины, почему они не являются самыми эффективными).
Можно использовать -I
опция xargs
:
find /tmp/ -ctime -1 -name "x*" | xargs -I '{}' mv '{}' ~/play/
Который работает в подобном механизме к find
и {}
. Я также заключил бы Ваш в кавычки -name
аргумент (потому что файл, запускающийся с x
в существующем каталоге был бы файл-globed и передал как аргумент для нахождения - который не даст ожидаемое поведение!).
Однако, как указано manatwork, как детализировано в xargs
страница справочника:
-I replace-str
Replace occurrences of replace-str in the initial-arguments with
names read from standard input. Also, unquoted blanks do not
terminate input items; instead the separator is the newline
character. Implies -x and -L 1.
Важная вещь отметить является этим -L 1
средства, что только одна строка вывода от find
будет обработан за один раз. Это означает, что это - синтаксически то же как:
find /tmp/ -ctime -1 -name "x*" -exec mv '{}' ~/play/
(который выполняет сингл mv
операция для каждого файла).
Даже использование GNU -0
аргумент xargs и find -print0
аргумент вызывает точно то же поведение -I
- это к clone()
процесс для каждого файла mv
:
find . -name "x*" -print0 | strace xargs -0 -I '{}' mv '{}' /tmp/other
.
.
read(0, "./foobar1/xorgslsala11\0./foobar1"..., 4096) = 870
mmap(NULL, 135168, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbb82fad000
open("/usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=26066, ...}) = 0
mmap(NULL, 26066, PROT_READ, MAP_SHARED, 3, 0) = 0x7fbb82fa6000
close(3) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fbb835af9d0) = 661
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 661
--- SIGCHLD (Child exited) @ 0 (0) ---
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fbb835af9d0) = 662
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 662
--- SIGCHLD (Child exited) @ 0 (0) ---
.
.
.
С инструментами GNU:
find /tmp/ -ctime -1 -name 'x*' -print0 |
xargs -r0 mv -t ~/play/
-t
(--target
) опцией является конкретный GNU. -print0
, -r
, -0
, в то время как нестандартный и инициирующий в GNU также найдены в некоторых других реализациях как на некотором BSDs.
POSIXly:
find /tmp/ -ctime -1 -name 'x*' -exec sh -c '
exec mv "$@" ~/play/' sh {} +
Оба выполненных как немногие mv
команды по мере необходимости и работа безотносительно изображают имена файлов, может содержать. GNU можно иметь преимущество это find
продолжает искать файлы в то время как mv
начинает перемещать первый пакет.
Остерегайтесь этого, все файлы и каталоги будут заканчиваться в одном каталоге, остерегаться столкновений, если несколько файлов в различных каталогах будут иметь то же имя.
mv
однажды для всех аргументов (или для всего из -L
или -n
, если предоставлено). Иначе, вызов mv
поскольку каждый файл станет старым (и медленный) быстро.
– r2evans
12.02.2018, 23:25
Возможно, сейчас эта команда возможна, а в 2013 году ее не было, но у меня она отлично работает:
ls pattern* | xargs mv -t DESTINATION/
Клавиша -t
помещает папку назначения на первое место, освобождая команду mv
для использования всех последних аргументов в качестве только файлов для перемещения.
Вы можете попробовать выполнить приведенную ниже команду и протестировать ее, и она работает нормально
find /tmp/ -ctime -1 -type f -name "x*" -exec mv -t ~/play/ {} \;
Я также хотел бы предложить несколько альтернативных инструментов. Конечно, find
существует уже очень давно, так что это надежный инструмент, но я обнаружил, что fd
намного проще работать с :
fd -d1 -epdf -S+2m -x mv {} books/
Эта команда переместит все pdf-файлы размером более 2 МБ в текущем каталоге во вложенную папку с именем «книги».
Мне нравится fd
, потому что он жалуется намного меньше, чем другие инструменты, такие как find+xargs
, имеют больше пограничных случаев, о которых вам нужно знать больше. Например, если файл имеет одинарную кавычку в имени, то xargs будет иметь потенциально неожиданное поведение.