в iOS 8 : так я делаю, чтобы получить ScreenShot
@property (слабый, неатомный) IBOutlet UIImageView * imageView;
-(IBAction)takeSnapShot:(id)sender;
2 добавлен фрагмент кода для создания снимка экрана и установите на UIImageView в файле .m
- (IBAction)takeSnapShot:(id)sender
{
UIGraphicsBeginImageContext(self.view.bounds.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *snapShotImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
imageView.image = snapShotImage;
}
Один из способов - использовать обратные кавычки:
mv `ls *.boo` subdir
Изменить : однако это хрупкий и не рекомендуется - см. Ответ @ lhunath для подробных объяснений и рекомендаций.
Не совсем уверен, чего вы здесь пытаетесь достичь, но вот одна возможность:
Часть «xargs» - важная часть, все остальное просто настраивается. Эффект от этого состоит в том, чтобы взять все, что выводит «ls», и добавить к нему расширение «.txt».
$ mkdir xxx # $ cd xxx $ touch a b c x y z $ ls a b c x y z $ ls | xargs -Ifile mv file file.txt $ ls a.txt b.txt c.txt x.txt y.txt z.txt $
Нечто подобное также может быть достигнуто с помощью:
$ touch a b c x y z $ for i in `ls`;do mv $i ${i}.txt; done $ ls a.txt b.txt c.txt x.txt y.txt z.txt $
Мне больше нравится второй способ. Я НИКОГДА не могу вспомнить, как работает xargs , не прочитав страницу руководства или не открыв мой файл "милых трюков".
Надеюсь, это поможет.
Check out find -exec {}
as it might be a better option than ls
but it depends on what you're trying to achieve.
Ни один из ответов пока не является безопасным для имен файлов с пробелами. Попробуйте следующее:
for i in *; do mv "$i" some_dir/; done
Вы, конечно, можете использовать любой шаблон глобуса вместо *
.
Вы заключаете ls в обратные кавычки и помещаете его после mv, вот так ...
mv `ls` somewhere/
Но имейте в виду, что если в каком-либо из имен ваших файлов есть пробелы, он выиграет работает не очень хорошо.
Также было бы проще сделать что-то вроде этого: mv filepattern * where /
Обратные кавычки работают хорошо, как предлагали другие. См. Также xargs. А для действительно сложных вещей передайте его в sed, составьте список нужных команд, затем снова запустите его с выводом sed, переданным в sh.
Вот пример с find, но он также отлично работает с ls:
http://github.com/DonBranson/scripts/blob/f09d24629ab6eb3ce509d4d3078818430306b063/jarfinder.sh
ls
- это инструмент, используемый для ОТОБРАЖЕНИЯ некоторой статистики об именах файлов в каталоге.
Это не инструмент, который вы должны использовать для их перечисления и передачи их к другому инструменту для использования там. Парсинг ls
почти всегда неправильный поступок, и в нем есть много ошибок.
Для получения подробного документа о вреде синтаксического анализа ls, который вам следует ] действительно прочтите, проверьте: http://mywiki.wooledge.org/ParsingLs
Вместо этого вы должны использовать либо глобусы, либо найти, в зависимости от того, чего именно вы пытаетесь достичь:
mv * /foo
find . -exec mv {} /foo \;
Основной источник плохого анализа ls
заключается в том, что ls выгружает все имена файлов в одну строку вывода, и нет способа отличить имена файлов оттуда. Насколько вы знаете, весь вывод ls
может представлять собой одно имя файла!
Вторичный источник плохого анализа ls
происходит из-за того, что половина мира использует bash. Они думают, что for
волшебным образом делает то, что они хотели бы, когда они делают что-то вроде:
for file in `ls` # Never do this!
for file in $(ls) # Exactly the same thing.
for
- это встроенная функция bash, которая перебирает аргументы. И $ (ls)
берет вывод ls
и разделяет его на аргументы везде, где есть пробелы
, символы новой строки
или вкладки
. Это в основном означает, что вы перебираете слов , а не имен файлов . Хуже того, вы просите греться, чтобы взять каждое из этих искаженных слов имени файла, а затем рассматривать их как глобусы, которые могут соответствовать именам файлов в текущем каталоге. Поэтому, если у вас есть имя файла, которое содержит слово, которое оказывается глобусом, совпадающим с другими именами файлов в текущем каталоге, это слово исчезнет, и все соответствующие имена файлов появятся вместо него!
mv `ls` /foo # Exact same badness as the ''for'' thing.
Вы не должны использовать вывод ls как ввод другой команды. Файлы с пробелами в именах сложны, как и включение управляющих последовательностей ANSI, если у вас есть:
alias ls-'ls --color=always'
, например.
Всегда используйте find или xargs (с -0) или подстановку.
Кроме того, вы не сделали этого. t сказать, хотите ли вы переместить файлы или переименовать их. Каждый будет обрабатываться по-разному.
edit: добавлено -0 в xargs (спасибо за напоминание)
Просто используйте find
или подстановку ваших оболочек!
find . -depth=1 -exec mv {} /tmp/blah/ \;
.. или ..
mv * /tmp/blah/
Вам не нужно беспокоиться о цвете в выводе ls, или другая странность конвейера - Linux допускает практически любые символы в имени файла, кроме нулевого байта .. Например:
$ touch "blah\new|
> "
$ ls | xargs file
blahnew|: cannot open `blahnew|' (No such file or directory)
.. но find работает отлично:
$ find . -exec file {} \;
./blah\new|
: empty
/bin/ls | tr '\n' '\0' | xargs -0 -i% mv % /path/to/destdir/
"Useless use of ls", but should work. By specifying the full path to ls(1) you avoid clashes with aliasing of ls(1) mentioned in some of the previous posts. The tr(1) command together with "xargs -0" makes the command work with filenames containing (ugh) whitespace. It won't work with filenames containing newlines, but having filenames like that in the file system is to ask for trouble, so it probably won't be a big problem. But filenames with newlines could exist, so a better solution would be to use "find -print0":
find /path/to/srcdir -type f -print0 | xargs -0 -i% mv % dest/
#!/bin/bash
for i in $( ls * );
do
mv $1 /backup/$1
done
иначе, это решение поиска с помощью sybreon, а, как предлагается, НЕ зеленое решение mv ls.