Как я могу переименовать много файлов с помощью командной строки?

Если вас не беспокоят файлы на новом жестком диске, почему бы вам не переформатировать диск и не установить на нем новый раздел NTFS.

Просто вытащите строку из и перезагрузите компьютер в Ubuntu. Откройте что-то вроде GParted и удалите существующие разделы с жесткого диска. Затем создайте новый тип NTFS. И, наконец, верните эту строку в /etc/fstab (первый, но с 0 в последнем столбце вместо 2:

UUID=48DCF742DCF728B8 /media/windows ntfs defaults 0 0
1
задан 20 June 2012 в 00:36

15 ответов

Использование find -exec должно работать, хотя оно будет рекурсивно проходить через подкаталоги, которые, в свою очередь, потерпят неудачу, если какой-либо из поддиректов будет содержать : или ?.

find . -name "*[:?]*" -exec rename 'y/:?/__/' {} +

argument list too long, потому что * распространяется на все 160k-файлы в каталоге, что превышает максимальную длину аргумента в вашей системе.

$ getconf ARG_MAX
2097152

Имена файлов 160k могут легко превышать 2MiB. Вы можете пропустить это путем переименования одного файла за раз

for file in ./*[:?]*; do 
    mv "$file" "${file//[:?]/_}"
done

или заполнить массив и обработать их в кусках. Насколько большой размер блока зависит от средней длины имен файлов и значения ARG_MAX; или просто установите достаточно низкое значение, чтобы быть безопасным, например. 1000:

files=( ./*[:?]* ) n=${#files[@]}
size=1000
for (( i=0; i<n; i+=size )); do
    rename 'y/:?/__/' "${files[@]:i:size}"
done

Также см. BashFAQ 30 .

2
ответ дан 25 July 2018 в 18:25

Использование find -exec должно работать, хотя оно будет рекурсивно проходить через подкаталоги, которые, в свою очередь, потерпят неудачу, если какой-либо из поддиректов будет содержать : или ?.

find . -name "*[:?]*" -exec rename 'y/:?/__/' {} +

argument list too long, потому что * распространяется на все 160k-файлы в каталоге, что превышает максимальную длину аргумента в вашей системе.

$ getconf ARG_MAX
2097152

Имена файлов 160k могут легко превышать 2MiB. Вы можете пропустить это путем переименования одного файла за раз

for file in ./*[:?]*; do 
    mv "$file" "${file//[:?]/_}"
done

или заполнить массив и обработать их в кусках. Насколько большой размер блока зависит от средней длины имен файлов и значения ARG_MAX; или просто установите достаточно низкое значение, чтобы быть безопасным, например. 1000:

files=( ./*[:?]* ) n=${#files[@]}
size=1000
for (( i=0; i<n; i+=size )); do
    rename 'y/:?/__/' "${files[@]:i:size}"
done

Также см. BashFAQ 30 .

2
ответ дан 2 August 2018 в 00:37

Использование find -exec должно работать, хотя оно будет рекурсивно проходить через подкаталоги, которые, в свою очередь, потерпят неудачу, если какой-либо из поддиректов будет содержать : или ?.

find . -name "*[:?]*" -exec rename 'y/:?/__/' {} +

argument list too long, потому что * распространяется на все 160k-файлы в каталоге, что превышает максимальную длину аргумента в вашей системе.

$ getconf ARG_MAX
2097152

Имена файлов 160k могут легко превышать 2MiB. Вы можете пропустить это путем переименования одного файла за раз

for file in ./*[:?]*; do 
    mv "$file" "${file//[:?]/_}"
done

или заполнить массив и обработать их в кусках. Насколько большой размер блока зависит от средней длины имен файлов и значения ARG_MAX; или просто установите достаточно низкое значение, чтобы быть безопасным, например. 1000:

files=( ./*[:?]* ) n=${#files[@]}
size=1000
for (( i=0; i<n; i+=size )); do
    rename 'y/:?/__/' "${files[@]:i:size}"
done

Также см. BashFAQ 30 .

2
ответ дан 4 August 2018 в 16:07

Использование find -exec должно работать, хотя оно будет рекурсивно проходить через подкаталоги, которые, в свою очередь, потерпят неудачу, если какой-либо из поддиректов будет содержать : или ?.

find . -name "*[:?]*" -exec rename 'y/:?/__/' {} +

argument list too long, потому что * распространяется на все 160k-файлы в каталоге, что превышает максимальную длину аргумента в вашей системе.

$ getconf ARG_MAX
2097152

Имена файлов 160k могут легко превышать 2MiB. Вы можете пропустить это путем переименования одного файла за раз

for file in ./*[:?]*; do 
    mv "$file" "${file//[:?]/_}"
done

или заполнить массив и обработать их в кусках. Насколько большой размер блока зависит от средней длины имен файлов и значения ARG_MAX; или просто установите достаточно низкое значение, чтобы быть безопасным, например. 1000:

files=( ./*[:?]* ) n=${#files[@]}
size=1000
for (( i=0; i<n; i+=size )); do
    rename 'y/:?/__/' "${files[@]:i:size}"
done

Также см. BashFAQ 30 .

2
ответ дан 6 August 2018 в 00:45

Использование find -exec должно работать, хотя оно будет рекурсивно проходить через подкаталоги, которые, в свою очередь, потерпят неудачу, если какой-либо из поддиректов будет содержать : или ?.

find . -name "*[:?]*" -exec rename 'y/:?/__/' {} +

argument list too long, потому что * распространяется на все 160k-файлы в каталоге, что превышает максимальную длину аргумента в вашей системе.

$ getconf ARG_MAX
2097152

Имена файлов 160k могут легко превышать 2MiB. Вы можете пропустить это путем переименования одного файла за раз

for file in ./*[:?]*; do 
    mv "$file" "${file//[:?]/_}"
done

или заполнить массив и обработать их в кусках. Насколько большой размер блока зависит от средней длины имен файлов и значения ARG_MAX; или просто установите достаточно низкое значение, чтобы быть безопасным, например. 1000:

files=( ./*[:?]* ) n=${#files[@]}
size=1000
for (( i=0; i<n; i+=size )); do
    rename 'y/:?/__/' "${files[@]:i:size}"
done

Также см. BashFAQ 30 .

2
ответ дан 7 August 2018 в 18:10

Использование find -exec должно работать, хотя оно будет рекурсивно проходить через подкаталоги, которые, в свою очередь, потерпят неудачу, если какой-либо из поддиректов будет содержать : или ?.

find . -name "*[:?]*" -exec rename 'y/:?/__/' {} +

argument list too long, потому что * распространяется на все 160k-файлы в каталоге, что превышает максимальную длину аргумента в вашей системе.

$ getconf ARG_MAX
2097152

Имена файлов 160k могут легко превышать 2MiB. Вы можете пропустить это путем переименования одного файла за раз

for file in ./*[:?]*; do 
    mv "$file" "${file//[:?]/_}"
done

или заполнить массив и обработать их в кусках. Насколько большой размер блока зависит от средней длины имен файлов и значения ARG_MAX; или просто установите достаточно низкое значение, чтобы быть безопасным, например. 1000:

files=( ./*[:?]* ) n=${#files[@]}
size=1000
for (( i=0; i<n; i+=size )); do
    rename 'y/:?/__/' "${files[@]:i:size}"
done

Также см. BashFAQ 30 .

2
ответ дан 10 August 2018 в 06:56

Использование find -exec должно работать, хотя оно будет рекурсивно проходить через подкаталоги, которые, в свою очередь, потерпят неудачу, если какой-либо из поддиректов будет содержать : или ?.

find . -name "*[:?]*" -exec rename 'y/:?/__/' {} +

argument list too long, потому что * распространяется на все 160k-файлы в каталоге, что превышает максимальную длину аргумента в вашей системе.

$ getconf ARG_MAX
2097152

Имена файлов 160k могут легко превышать 2MiB. Вы можете пропустить это путем переименования одного файла за раз

for file in ./*[:?]*; do 
    mv "$file" "${file//[:?]/_}"
done

или заполнить массив и обработать их в кусках. Насколько большой размер блока зависит от средней длины имен файлов и значения ARG_MAX; или просто установите достаточно низкое значение, чтобы быть безопасным, например. 1000:

files=( ./*[:?]* ) n=${#files[@]}
size=1000
for (( i=0; i<n; i+=size )); do
    rename 'y/:?/__/' "${files[@]:i:size}"
done

Также см. BashFAQ 30 .

2
ответ дан 15 August 2018 в 18:54
  • 1
    find можно запросить НЕ рекурсивно, используя -maxdepth 1. Это будет работать только с файлами в текущем каталоге. Кроме того, для файлов, содержащих ?, он должен быть экранирован, например. find -name "*\?*". Оригинальный плакат не упоминал, если он заботился о подкаталогах; если нет, то решение find кажется лучшим. – roadmr 19 June 2012 в 18:49
  • 2
    @roadmr, конечно, хотя я бы предпочел использовать shell globs или find -prune, чем нестандартный -maxdepth, но это главным образом потому, что я не работаю только с системами GNU / linux. И правильно, я забыл о ?, я обновлю ответ, включив замену ?. – geirha 19 June 2012 в 19:44
  • 3
    @roadmr Отрицательный, весь файл файлов находится в одной и той же подпапке. Я рассмотрю эту статью часто задаваемых вопросов, на данный момент, код в середине (for file in ...) запущен, мы увидим, как это получится. Спасибо за ответ. – Whisperity 20 June 2012 в 00:39

Я использую это для массового переименования: vidir. Он использует более или менее тот же синтаксис, что и мы vi делает!

apt-get install moreutils

Перейти в каталог с файлами 160k

cd dir

Запустить vidir

Затем замените все: в имени файла с помощью -

: % s/:/-/g

Сделайте то же самое с другими странными символами, например:

: % s/?/-/g

Теперь сохраните файлы, используя: w

vidir позволяет редактировать содержимое каталога в текстовом редакторе.

http://joeyh.name/code/moreutils/

2
ответ дан 25 May 2018 в 09:58

Я использую это для массового переименования: vidir. Он использует более или менее тот же синтаксис, который мы vi делает!

apt-get install moreutils

Перейти в каталог с файлами 160k

cd dir

Запустить vidir

vidir

Затем замените все: в имени файла с помощью -

: % s/:/-/g

Сделайте то же самое с другими странными символами, как?

: % s/?/-/g

Теперь сохраните файлы, используя: w

vidir позволяет редактировать содержимое каталога в текстовом редакторе.

http://joeyh.name/code/moreutils/

2
ответ дан 25 July 2018 в 18:25

Я использую это для массового переименования: vidir. Он использует более или менее тот же синтаксис, который мы vi делает!

apt-get install moreutils

Перейти в каталог с файлами 160k

cd dir

Запустить vidir

vidir

Затем замените все: в имени файла с помощью -

: % s/:/-/g

Сделайте то же самое с другими странными символами, как?

: % s/?/-/g

Теперь сохраните файлы, используя: w

vidir позволяет редактировать содержимое каталога в текстовом редакторе.

http://joeyh.name/code/moreutils/

2
ответ дан 2 August 2018 в 00:37

Я использую это для массового переименования: vidir. Он использует более или менее тот же синтаксис, который мы vi делает!

apt-get install moreutils

Перейти в каталог с файлами 160k

cd dir

Запустить vidir

vidir

Затем замените все: в имени файла с помощью -

: % s/:/-/g

Сделайте то же самое с другими странными символами, как?

: % s/?/-/g

Теперь сохраните файлы, используя: w

vidir позволяет редактировать содержимое каталога в текстовом редакторе.

http://joeyh.name/code/moreutils/

2
ответ дан 4 August 2018 в 16:07

Я использую это для массового переименования: vidir. Он использует более или менее тот же синтаксис, который мы vi делает!

apt-get install moreutils

Перейти в каталог с файлами 160k

cd dir

Запустить vidir

vidir

Затем замените все: в имени файла с помощью -

: % s/:/-/g

Сделайте то же самое с другими странными символами, как?

: % s/?/-/g

Теперь сохраните файлы, используя: w

vidir позволяет редактировать содержимое каталога в текстовом редакторе.

http://joeyh.name/code/moreutils/

2
ответ дан 6 August 2018 в 00:45

Я использую это для массового переименования: vidir. Он использует более или менее тот же синтаксис, который мы vi делает!

apt-get install moreutils

Перейти в каталог с файлами 160k

cd dir

Запустить vidir

vidir

Затем замените все: в имени файла с помощью -

: % s/:/-/g

Сделайте то же самое с другими странными символами, как?

: % s/?/-/g

Теперь сохраните файлы, используя: w

vidir позволяет редактировать содержимое каталога в текстовом редакторе.

http://joeyh.name/code/moreutils/

2
ответ дан 7 August 2018 в 18:10

Я использую это для массового переименования: vidir. Он использует более или менее тот же синтаксис, который мы vi делает!

apt-get install moreutils

Перейти в каталог с файлами 160k

cd dir

Запустить vidir

vidir

Затем замените все: в имени файла с помощью -

: % s/:/-/g

Сделайте то же самое с другими странными символами, как?

: % s/?/-/g

Теперь сохраните файлы, используя: w

vidir позволяет редактировать содержимое каталога в текстовом редакторе.

http://joeyh.name/code/moreutils/

2
ответ дан 10 August 2018 в 06:56

Я использую это для массового переименования: vidir. Он использует более или менее тот же синтаксис, который мы vi делает!

apt-get install moreutils

Перейти в каталог с файлами 160k

cd dir

Запустить vidir

vidir

Затем замените все: в имени файла с помощью -

: % s/:/-/g

Сделайте то же самое с другими странными символами, как?

: % s/?/-/g

Теперь сохраните файлы, используя: w

vidir позволяет редактировать содержимое каталога в текстовом редакторе.

http://joeyh.name/code/moreutils/

2
ответ дан 15 August 2018 в 18:54

Другие вопросы по тегам:

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