Сценарии оболочки в Linux

Как я могу переместить несколько файлов, содержащих пробелы, в другой каталог с помощью сценария bash?

имя файла: "Sublime Text 3.x"

мой код:

for file in $(ls -t | tail -n +1)
do 
mv $file /tmp/test
done

Вывод отображается как :

mv: cannot stat ‘Sublime’: No such file or directory
mv: cannot stat ‘Text’: No such file or directory
mv: cannot stat ‘3.x’: No such file or directory
-2
задан 2 November 2016 в 10:06
2 ответа

Вы можете добиться этого с помощью

ls -t | grep ' ' | while read file; do mv "$file" /tmp/test; done

Надеюсь, это поможет, вы можете задать вопросы, если они у вас есть!

1
ответ дан 5 December 2019 в 21:23

Вам нужно будет заключить строку в кавычки, когда вы используете ее для ls и перемещения команда:

for file in "$(ls -t | tail -n +1)"
do
  mv "$file" /tmp/test
done

Попробуйте это.

Более подробное объяснение:

Если вы внимательно посмотрите на вывод вашего примера, вы увидите, что интерпретатор пытается трижды:

сначала он пытается переместить файл 'Sublime'

Затем он пытается переместить файл «Текст»

и, наконец, он пытается переместить файл «3.x»

Подсказка, которую вы можете уловить, заключается в том, что они разделены пробелом. Вы можете переместить три файла за один раз с помощью команды mv , но только если эти файлы существуют.

поэтому:

mv file1.txt file2.txt file3.txt /some/destination/dir

.. может быть допустимой командой для перемещения трех файлов.

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

Хороший вопрос!

0
ответ дан 5 December 2019 в 21:23

Теги

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