Как я могу переместить несколько файлов, содержащих пробелы, в другой каталог с помощью сценария 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
Вы можете добиться этого с помощью
ls -t | grep ' ' | while read file; do mv "$file" /tmp/test; done
Надеюсь, это поможет, вы можете задать вопросы, если они у вас есть!
Вам нужно будет заключить строку в кавычки, когда вы используете ее для 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
.. может быть допустимой командой для перемещения трех файлов.
Чтобы интерпретатор не искал отдельные файлы (разделенные пробелом), вы можете указать ему, чтобы он брал полное имя файла (включая пробелы), когда вы окружаете переменную пробелами.
Хороший вопрос!