MV: не может устанавливать «файл filename_1_2_3»: нет такого файла или каталога

Больше комментария, чем ответа (но я пока не могу публиковать комментарии :(), но есть ли у вас изучил alsa и pulseaudio

со своей вики-страницы ( https://en.wikipedia.org/wiki/PulseAudio )

PulseAudio - звуковой сервер , фоновый процесс , принимающий ввод звука от одного или нескольких источников (процессов или устройств захвата) и перенаправляющий его на один или несколько приемников (звуковые карты, удаленные сетевые серверы PulseAudio или другие процессы )

Теоретически вы можете перенаправить alsa на pulseaudio и использовать pulseaudio для перенаправления звука туда, куда вы хотите (на командный язык). Я бы не стал знаю, как это сделать, но это кажется возможным

РЕДАКТИРОВАТЬ:

Начните с pavucontrol . Это хороший графический интерфейс для pulseaudio , который может помочь вам перенаправить звук в другое место

0
24.01.2019, 22:30
2 ответа

Вы заметите, что ls -Rвыводит имена файлов . То есть он не выводит пути . Поэтому, если файл, содержащий строку _2_3в своем имени, находится в одном из ваших подкаталогов, в выводеls -R(в той же строке нет информации о , где этот файл находится. как имя файла ). Это приведет к сбою вашей команды (имя файла не найдено в текущем каталоге ). Это также приведет к ошибке для любого файла, который содержит пробел, табуляцию или новую строку в своем имени, и потенциально также может привести к странным результатам, если какое-либо имя файла содержит символы подстановки имени файла.

Вместо этого, если вы хотите переместить файлы, имена файлов которых заканчиваются на _2_3в каталог/directory1/directory2/directory3(и что этот каталог не является подкаталогом текущего каталога ), тогда

find. -type f -name '*_2_3' -exec mv -t /directory1/directory2/directory3 {} +

сделал бы это.Это найдет пути ко всем обычным файлам (, а не к каталогам, именованным каналам, символическим ссылкам и т. д. ), чьи имена заканчиваются на _2_3в любом месте текущего каталога или под ним, и будет выполнено mv -t /directory1/directory2/directory3с таким количеством из этих путей как можно в пакетах.

В оболочке bashвы могли бы также сделать

shopt -s globstar
mv -t /directory1/directory2/directory3 **/*_2_3

, если шаблон не расширяется до многих тысяч имен. Параметр оболочки globstarв bashвключает шаблон подстановки **. Он работает как *, но будет соответствовать через/в именах путей. Таким образом, он найдет все имена, соответствующие *_2_3, в любом месте текущего каталога или ниже него. Обратите внимание, что эта команда не заботится о том, какой тип имени соответствует, и может также соответствовать именам каталогов, например (, но ваш подход ls -Rбудет соответствовать ).

В оболочке zshможно было бы уточнить соответствие:

mv -t /directory1/directory2/directory3 **/*_2_3(.)

(.)изменяет поведение предыдущего шаблона, чтобы он соответствовал только обычным файлам. Шаблон **включен по умолчанию в zsh.

Если вы хотите найти файлы, имена которых содержат _2_3, просто измените бит *_2_3шаблона имени файла в приведенных выше командах на *_2_3*.

2
28.01.2020, 02:30

Важной частью сообщения является:No such file or directory. ls -Rне включает путь к файлу. Итак, mvимеет только имя файла, но не может его найти, потому что путь к нему отсутствует.

Вместо этого сделайте это:

$ find./ -name '*_2_3*' -exec mv -t directory1/directory2/directory3/ {} +
0
28.01.2020, 02:30

Теги

Похожие вопросы