Я намерение скопировать вывод с ls
gaowei@alpha:~/Downloads$ ls | head -n 10 | tail -n 5
Abraham Silberschatz, Greg Gagne, Peter B. Galvin - Operating System Concepts (2018, Wiley).pdf
Alan Shalloway - Design Patterns Explained_ A New Perspective on Object-Oriented Design (2004, Addison-Wesley Professional).pdf
Alan Shalloway, James R. Trott - Design patterns explained a new perspective on object-oriented design (2004, Addison-Wesley Professional).chm
Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman - Compilers - Principles, Techniques, and Tools (2006, Pearson_Addison Wesley).pdf
Anany Levitin - Introduction to the Design and Analysis of Algorithms (2012, Pearson).pdf
и попробованный
me@host:~/Downloads$ ls | head -n 10 | tail -n 5 | xargs xclip -sel clip
xclip: Abraham: No such file or directory
me@host:~/Downloads$ xclip -sel clip $(ls | head -n 10 | tail -n 5)
xclip: Abraham: No such file or directory
Они перестали работать. Мне придется перенаправить вывод в файл, прежде чем будут использовать 'xclip'?
Передать имена файлов от Вашего канала до xclip
, все, в чем Вы нуждаетесь,
ls | head -n 10 | tail -n 5 | xclip -sel clip
потому что xclip
текстом чтений по умолчанию от стандартного входа.
Путем добавления xargs
, Вы передавали вывод канала как последовательность аргументов имени файла xclip
, который в принципе был бы способом скопировать содержание файлов в буфер обмена, однако он перестал работать потому что по умолчанию xargs
рассматривает каждое разграниченное пробелом слово как отдельный аргумент - если бы Вы действительно хотели скопировать содержание файла в буфер обмена, то состоял бы в том, чтобы сказать путь вокруг этого xargs
использовать разделитель новой строки:
ls | head -n 10 | tail -n 5 | xargs -d '\n' xclip -sel clip
или, еще лучше (так как новая строка является на самом деле легальным - хотя редко используется - символ в именах файлов), сделайте целый конвейер разграниченным пустым указателем:
printf '%s\0' * | head -zn 10 | tail -zn 5 | xargs -0 xclip -sel clip
То, что можно сделать, является использованием find
распечатать использование имени файла -name
или -iname
флаг. xclip
берет вход через stdin, таким образом, все, что необходимо сделать, должно отправить имя файла через канал.
$ find -maxdepth 1 -type f -name 'Abraham*Operating Systems*pdf' -printf '%P\n' | xclip -sel clip
-name
/-iname
флаги используют простое сопоставление с образцом, и -printf
с с %P
спецификатор формата произведет просто имя файла. Отметьте это find
принимает текущий рабочий каталог .
если никакой каталог не указан.
Что касается Вашей исходной команды
$ ls | head -n 10 | tail -n 5 | xargs xclip -sel clip
существует несколько проблем с ним. Каждый анализирует ls
(чтение это производится через команду), который обычно не рекомендуется. Вывод может содержать символы управления цветом и другую информацию. На самом деле были предложения добавить флаг опции к ls
так, чтобы это могло произвести объекты, разделенные \0
символ (это - надежный метод), но это было отклонено разработчиками GNU по очевидным причинам:
Однако ls является действительно инструментом для прямого потребления человеком, и в этом случае последующая обработка менее полезна. Для дальнейшей обработки найдите (1), больше подходит.
Другая проблема с Вашей исходной командой xargs
использование здесь. xclip
может считать вход из stdin очень хорошо, поэтому если Вы хотите отправить некоторый текст в буфер обмена, достаточно легко просто сделать что-то как echo foo | xclip -sel clip
. Если Вы хотите скопировать содержание файла, то необходимо сделать тот файл stdin
xclip -sel clip < /etc/passwd
Копирование имени файла в командной строке может быть проблематичным из-за специальных символов, таких как вкладки, новые строки, пробелы. Обычно в командной строке Вы использовали бы find
. Инструменты Filemanagers и GUI используют форму URI имен файлов, где специальные символы и символы UTF-8 заменяются шестнадцатеричными значениями. Например,
$ gio info --attributes='uri:' 文er-\ 林中鸟\ -\ 林中鳥-YY神曲-uUX0sZHQMkw.mp3 | awk '/uri:/{print $2}'
file:///home/xie/%E6%96%87er-%20%E6%9E%97%E4%B8%AD%E9%B8%9F%20-%20%E6%9E%97%E4%B8%AD%E9%B3%A5-YY%E7%A5%9E%E6%9B%B2-uUX0sZHQMkw.mp3
Это может быть передано xclip
и позже вставленный в строку поиска веб-браузера. Наутилус и диалоговые окна Выбора Файла, кажется, не поддерживают вставку это от буфера обмена простого текста все же.