Напишите функцию, меняющую расширение в имени файла на заданное, например, на bak

Обновлено: 30.06.2024

(PHP 4, PHP 5, PHP 7, PHP 8)

copy — Копирует файл

Описание

Создает копию файла из в в .

Если вы хотите переместить файл, используйте функцию rename().

Параметры

Путь к исходному файлу.

Путь назначения. Если to является URL-адресом, операция копирования может завершиться ошибкой, если оболочка не поддерживает перезапись существующих файлов.

Если целевой файл уже существует, он будет перезаписан.

Действительный ресурс контекста, созданный с помощью stream_context_create() .

Возвращаемые значения

Возвращает true в случае успеха или false в случае неудачи.

Примеры

$file = 'example.txt';
$newfile = 'example.txt.bak' ;

if (! copy ( $file , $newfile )) echo "не удалось скопировать $file . \n" ;
>
?>

См. также

  • move_uploaded_file() — перемещает загруженный файл в новое место.
  • rename() — переименовывает файл или каталог
  • Раздел руководства о загрузке файлов

Примечания, внесенные пользователями 23 примечания

Потратив часы на исправление ошибки copy(): Отказано в доступе (и должным образом беспокоясь о chmod на winXP), стоит отметить, что «назначение» должно содержать фактическое имя файла! --- НЕ просто путь к папке, в которую вы хотите скопировать.
УЖАС!
надеюсь, это сэкономит кому-то часы бесплодной отладки

Мне потребовалось много времени, чтобы понять, в чем проблема, когда у меня возникает ошибка в функции copy(). Он НЕ создает никаких каталогов. Он копирует только существующий путь. Поэтому создайте каталоги заранее. Надеюсь, я помогу,

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

if(!@ copy( 'http://someserver.com/somefile.zip', './somefile.zip' ))
$errors = error_get_last ();
Эхо "ОШИБКА КОПИРОВАНИЯ: " . $ошибки ['тип'];
эхо "
\n" . $errors [ 'message' ];
> else echo "Файл скопирован с удаленного компьютера!" ;
>
?>

Вот простой скрипт, который я использую для удаления и копирования непустых каталогов. Очень полезно, когда вы не уверены в типе файла.

Я использую их для управления папками и zip-архивами для плагинов моего веб-сайта.

// удаляет файлы и непустые каталоги
функция rrmdir ( $dir ) if ( is_dir ( $dir )) $files = scandir ( $dir );
foreach ($files as $file)
if ($file != "." && $file != ".." ) rrmdir ("$dir / $file");
rmdir ( $dir );
>
else if ( file_exists ( $dir )) удалить связь ( $dir );
>

// копирует файлы и непустые каталоги
function rcopy ( $src , $dst ) if ( file_exists ( $dst )) rrmdir ( $dst );
if ( is_dir ( $src )) mkdir ( $dst );
$files = скандир ( $src );
foreach ($files as $file)
if ($file != "." && $file != ".." ) rcopy ("$src / $file", "$dst / $ файл " );
>
else if ( file_exists ( $src )) copy ( $src , $dst );
>
?>

Ура!

Хороший простой трюк, если вам нужно сначала убедиться, что папка существует:

$srcfile = 'C:\File\Whatever\Path\Joe.txt' ;
$dstfile = 'G:\Shared\Reports\Joe.txt' ;
mkdir(dirname($dstfile), 0777, true);
копировать ( $srcfile , $dstfile );

Ниже фрагмент кода для загрузки файла с веб-сервера в локальный файл.

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

Дополнительно демонстрируется обработка заголовков ответов (если они заданы сервером) для определения метки времени и имени файла. Тип файла проверяется, поскольку некоторые серверы возвращают код возврата 200 OK с текстовой страницей «не найдено» вместо правильного кода возврата 404.

// $fURI: URL-адрес файла, расположенного на веб-сервере
// $target_file: Путь к локальному файлу

if (file_exists ($target_file)) $ifmodhdr = 'If-Modified-Since:'. дата ("r", время_файла ($ target_file)). "\r\n" ;
>
else $ifmodhdr = '' ;
>

// устанавливаем заголовок запроса для GET с реферером для измененных файлов, следующих за перенаправлениями
$arrRequestHeaders = array(
'http' =>array(
'method' => 'GET ' ,
'protocol_version' => 1.1 ,
'follow_location' => 1 ,
'header' => "User-Agent: Anamera-Feed/1.0\r\n" . < br />"Referer: $source \r\n" .
$ifmodhdr
)
);
$rc = copy ($fURI, $target_file, stream_context_create ($arrRequestHeaders));

Каждый день системным администраторам приходится выполнять различные стандартные операции с многочисленными файлами и папками на своих серверах Windows. Эти задачи часто включают в себя управление данными пользователей на общих ресурсах и правильное поддержание резервных копий. Вы можете использовать PowerShell, чтобы уменьшить объем ручной работы.

Прежде чем начать, убедитесь, что ваша системная политика разрешает выполнение сценариев PowerShell, как описано в «Учебнике по написанию сценариев Windows PowerShell для начинающих».

Просмотр объектов в каталоге

Чтобы просмотреть содержимое каталога на файловом сервере Windows, используйте командлет Get-ChildItem. Чтобы показать все скрытые файлы, добавьте параметр -Force. Приведенная ниже команда показывает все корневые объекты в общей папке:

Если вы хотите также проверять все подпапки и их содержимое, добавьте параметр -Recurse:

Чтобы отфильтровать вывод, добавьте параметры Filter, Exclude, Include и Path в командлет Get-ChildItem. Для расширенной фильтрации объектов используйте командлет Where-Object. Приведенный ниже сценарий ищет все исполняемые файлы в папке IT, которые были изменены после 1 апреля 2018 г.:

Создание файлов и папок с помощью PowerShell

Чтобы создать новые объекты с помощью Windows PowerShell, вы можете использовать командлет New-Item и указать тип создаваемого элемента, например каталог, файл или раздел реестра.

Например, эта команда создает папку:

И эта команда создает пустой файл:

Создание файлов и запись в них данных

Существует как минимум два встроенных метода для создания файла и записи в него данных. Во-первых, используйте командлет Out-File:

Чтобы перезаписать существующий файл, используйте параметр –Force.

Вы также можете создавать файлы с помощью командлета Export-Csv, который экспортирует выходные данные в файл csv, который можно открыть в Excel:

Создайте файлы, убедившись, что они еще не существуют

Следующий сценарий проверяет, существует ли уже определенный файл (pc.txt) в определенной папке; если нет, он создает список всех компьютеров AD и сохраняет его в новый файл с именем pc.txt:

Удаление файлов и папок с помощью PowerShell

Чтобы удалить объекты, используйте командлет Remove-Item. Обратите внимание, что при выполнении требуется ваше подтверждение, если объект не пустой. В приведенном ниже примере показано, как удалить папку IT и все вложенные в нее папки и файлы:

Если вы уже убедились, что все объекты в папке должны быть удалены, вы можете использовать переключатель ?Recurse, чтобы пропустить шаг подтверждения:

Удалить файлы и папки старше X дней

Иногда вам нужно удалить старые файлы из определенного каталога. Вот как это сделать:

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

Вот как проверить, существует ли файл, и удалить его, если он существует:

Удаление файлов с нескольких компьютеров одним скриптом

Чтобы удалить файлы с удаленных компьютеров, у вас должны быть соответствующие разрешения безопасности для доступа к ним. Обязательно используйте пути UNC, чтобы сценарий правильно определял расположение файлов.

Копировать файлы и папки с помощью PowerShell

Командлет Copy-Item позволяет копировать объекты с одного пути на другой. Следующая команда создает резервную копию, копируя файл users.xlsx с одного удаленного компьютера (fs) и сохраняя его на другом (fs2) по сети:

Если целевой файл уже существует, попытка копирования завершится неудачей. Чтобы перезаписать существующий файл, даже если он находится в режиме только для чтения, используйте параметр -Force:

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

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

Например, используйте эту команду для копирования файлов с удаленного файлового сервера в локальный каталог C::

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

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

Вы также можете копировать файлы с одного удаленного сервера на другой. Следующий скрипт рекурсивно копирует папку \\fs\Shared\temp в \\fs\Shared\test:

Копировать только определенные типы файлов

Чтобы скопировать только определенные файлы из исходного содержимого в целевое, используйте параметр -Filter. Например, следующая команда копирует только текстовые файлы из одной папки в другую:

Копировать файлы с помощью команд XCOPY и ROBOCOPY или COM-объектов

Вы также можете запускать команды XCOPY и ROBOCOPY для копирования файлов или использовать COM-объекты, как в примере ниже:

Перемещение файлов и каталогов с помощью PowerShell

Командлет Move-Item перемещает элемент, включая его свойства, содержимое и дочерние элементы, из одного места в другое. Он также может перемещать файл или подкаталог из одного каталога в другое место.

Следующая команда перемещает определенный файл резервной копии из одного места в другое:

Этот сценарий перемещает всю папку резервных копий и ее содержимое в другое место:

Каталог Backups со всеми его файлами и подпапками появится в каталоге архива.

Переименовать файлы с помощью PowerShell

Командлет Rename-Item позволяет изменить имя объекта, не затрагивая его содержимое.Невозможно переместить элементы с помощью команды Rename-Item; для этой функции следует использовать командлет Move-Item, как описано выше.

Следующая команда переименовывает файл:

Переименовать несколько файлов

Чтобы переименовать несколько файлов одновременно, используйте такой скрипт:

Изменить расширения файлов с помощью PowerShell

Вы также можете использовать Rename-Item для изменения расширений файлов. Если вы хотите изменить расширения сразу нескольких файлов, используйте командлет Rename-Item с командлетом Get-ChildItem.

Следующий скрипт изменяет все расширения файлов «txt» на «bak». Подстановочный знак (*) обеспечивает включение всех текстовых файлов:

Используя информацию в этой статье, вы можете автоматизировать множество простых операций, связанных с управлением файлами в ваших файловых хранилищах, и сэкономить время для более важных задач. Удачи!

Как я могу создать файл?

Используйте командлет New-Item для создания файла:

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

Как создать текстовый файл

Чтобы создать новый объект с помощью Windows PowerShell, используйте командлет New-Item и укажите тип создаваемого элемента, например:

Как создать каталог

Чтобы создать новый каталог с помощью PowerShell, используйте командлет New-Item:

Вы также можете использовать командлет New-Item для создания файлов, папок или разделов реестра

Как удалить файл?

Чтобы удалить объект, используйте командлет Remove-Item. Подтверждение будет запрошено при выполнении, если объект не пустой.

Вы также можете удалить все файлы старше X дней или удалить файлы с нескольких компьютеров с помощью PowerShell.

Как скопировать файл?

Используйте командлет Copy-Item для копирования объектов с одного пути на другой. Следующая команда создает резервную копию, копируя файл users.xlsx с одного удаленного компьютера (fs) на другой (fs2) по сети:

Обратите внимание: если целевой файл уже существует, попытка копирования завершится неудачей. Узнайте, как перезаписывать файлы при их копировании с удаленного компьютера или на него.

Как переместить файл?

Командлет Move-Item перемещает элемент, включая его свойства, содержимое и дочерние элементы, из одного места в другое:

Как переименовать файл?

Чтобы переименовать один файл с помощью PowerShell, используйте следующую команду:

Вы также можете переименовать несколько файлов с помощью PowerShell.

Ян — бывший специалист по техническому маркетингу в Netwrix. Он ИТ-специалист с более чем 15-летним опытом и активный блоггер PowerShell.

В этом документе перечислены команды для создания, копирования, переименования и удаления файлов и каталогов Unix. Предполагается, что вы используете Unix в службе входа в систему ITS (login.itd.umich.edu). Приведенные здесь инструкции применимы ко многим другим машинам Unix; однако вы можете заметить другое поведение, если вы не используете службу входа в ITS.

Что такое файлы и каталоги Unix?

Файл — это «контейнер» для данных. Unix не делает различий между типами файлов — файл может содержать текст документа, данные для программы или саму программу.

Каталоги позволяют упорядочивать файлы, позволяя группировать связанные файлы вместе. Каталоги могут содержать файлы и/или другие каталоги. Каталоги аналогичны папкам Macintosh и Windows.

Именование файлов и каталогов Unix

У каждого файла и каталога есть имя. В каталоге каждый элемент (то есть каждый файл или каталог) должен иметь уникальное имя, но элементы с одинаковым именем могут существовать более чем в одном каталоге. Каталог может иметь то же имя, что и один из содержащихся в нем элементов.

Имена файлов и каталогов могут содержать до 256 символов. Имена могут использовать практически любой символ (кроме пробела). Вы можете разделить имя файла, состоящее из нескольких слов, с помощью символа подчеркивания или точки (например, Chapter_one или Chapter.two).

Некоторые символы имеют особое значение для Unix. Лучше избегать использования этих символов в именах файлов:

Unix чувствителен к регистру. Каждый из них является уникальным файлом: myfile, Myfile, myFile и MYFILE.

Создание файла

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

Завершите ввод файла, нажав Control-d в отдельной строке. (Удерживая нажатой клавишу Control, введите d.) На экране вы увидите:

Чтобы просмотреть содержимое только что созданного файла, введите его в строке %:

Копирование файла

Чтобы создать дубликат файла, используйте команду cp. Например, чтобы создать точную копию файла с именем firstfile, введите:

В результате появляются два файла с разными именами, каждый из которых содержит одинаковую информацию. Команда cp перезаписывает информацию. Если вы создадите другой файл с именем ThirdFile, а затем введите следующую команду:

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

Переименование файла

В Unix нет специальной команды для переименования файлов. Вместо этого команда mv используется как для изменения имени файла, так и для перемещения файла в другой каталог.

Чтобы изменить имя файла, используйте следующий формат команды (где Thirdfile и file3 — примеры имен файлов):

Эта команда приводит к полному удалению третьего файла, но новый файл с именем файл3 содержит предыдущее содержимое третьего файла.

Как и cp, команда mv перезаписывает существующие файлы. Например, если у вас есть два файла, четвертый и второй, и вы вводите команду

mv удалит исходное содержимое второго файла и заменит его содержимым четвертого файла. В результате четвертый файл переименовывается во второй файл, но при этом второй файл удаляется.

Удаление файла

Используйте команду rm для удаления файла. Например,

удаляет файл3 и его содержимое. Вы можете удалить более одного файла за раз, указав список файлов, которые необходимо удалить. Например,

Вам будет предложено подтвердить, действительно ли вы хотите удалить файлы:

Введите y или yes, чтобы удалить файл; введите n или нет, чтобы оставить его без изменений.

Создание каталога

Создание каталогов позволяет упорядочивать файлы. Команда

создает каталог с именем project1, где вы можете хранить файлы, относящиеся к конкретному проекту. Созданный вами каталог будет подкаталогом внутри вашего текущего каталога. Подробнее о навигации по каталогам и отображении содержащихся в них файлов и каталогов см. в разделе Список содержимого и навигация по каталогам Unix.

Перемещение и копирование файлов в каталог

Команды mv и cp можно использовать для помещения файлов в каталог. Предположим, вы хотите поместить некоторые файлы из вашего текущего каталога во вновь созданный каталог с именем project1. Команда

переместит библиографию файлов в каталог project1. Команда

поместит копию файла Chapter1 в каталог Project1, но оставит Chapter1 нетронутым в текущем каталоге. Теперь будет две копии главы 1: одна в текущем каталоге, а другая в проекте 1.

Переименование каталога

Вы также можете использовать команду mv для переименования и перемещения каталогов. Когда вы вводите команду

каталог с именем проект1 получит новое имя проект2, если ранее каталог с именем проект2 не существовал. Если каталог project2 уже существовал до того, как была введена команда mv,

переместит каталог project1 и его файлы в каталог project2.

Копирование каталога

Вы можете использовать команду cp для создания копии каталога и его содержимого. Например, чтобы скопировать каталог project1 в каталог proj1copy, введите

Если каталог proj1copy уже существует, эта команда поместит копию каталога project1 в каталог proj1copy\.

Удаление каталога

Используйте команду rmdir, чтобы удалить пустой каталог. Несколько пустых каталогов можно удалить, перечислив их после команды:

Если вы попытаетесь удалить каталог, который не пуст, вы увидите

rmdir: testdir3: Каталог не пустой

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

Сводка команд

Работа с файлами

mv файл1 файл2
Переименовывает файл1 в файл2 (если файл2 существовал ранее, перезаписывает исходное содержимое файла2).

cp файл1 файл2
Копирует файл1 как файл2 (если файл2 существовал ранее, перезаписывает исходное содержимое файла2).

rm файл3 файл4
Удаляет файл3 и файл4, запрашивая подтверждение для каждого удаления.

Работа с каталогами

mkdir dir1
Создает новый каталог с именем dir1.

mv dir1 dir2
Если dir2 не существует, переименовывает dir1 в dir2.
Если каталог dir2 существует, каталог dir1 перемещается внутрь каталога dir2.

cp -r dir1 dir2
Если dir2 не существует, копирует dir1 как dir2.
Если каталог dir2 существует, копирует dir1 внутрь dir2.

rmdir dir1
Удаляет dir1, если dir1 не содержит файлов.

rm -r dir1
Удаляет dir1 и все содержащиеся в нем файлы. Используйте с осторожностью.

Работа с файлами и каталогами

cp file1 dir1
Копирует файл file1 в существующий каталог dir1.

mv file2 dir2
Перемещает файл file2 в существующий каталог dir2.

Предположим, что из index.py с CGI у меня есть почтовый файл foo.fasta для отображения файла. Я хочу изменить расширение файла foo.fasta на foo.aln в отображаемом файле. Как мне это сделать?

9 ответов 9

Элегантный способ использования pathlib.Path:

Хотя OP не просил выполнить переименование, оно было в тегах, и если вы собираетесь выполнить переименование и, если возможно, входные данные могут иметь путь, а не только имя файла, этот метод правильный.

Используйте первую функцию, чтобы получить базу. Объедините его с новым расширением и передайте старое имя файла и новое имя файла второй функции.

Исправление: os.rename(root, root + new_extension) должно читаться как os.rename(renamee, root + new_extension)

На самом деле лучше использовать этот метод вместо python3: pathlib.path(pathtofile).with_suffix(".mynewext"). Способ, предложенный с pathlib.path(pathtofile).stem, работает, но удалит путь перед базовым именем.

Где thisFile = абсолютный путь к файлу, который вы изменяете

Мне нравится этот ответ больше, потому что он дает пример, а не просто цитирует методы, необходимые для выполнения задачи. Спасибо @FryDay

Начиная с Python 3.4 имеется встроенная библиотека pathlib. Таким образом, код может быть примерно таким:

Это еще лучше с синтаксисом интерполяции строк Python 3.6 ( python.org/dev/peps/pep-0498 ) new_filename = f".aln" 😎😎😎

Будьте осторожны — стебель также удаляет путь, если он присутствует. Если бы вы хотели переименовать файл и если бы был указан путь (которого, по общему признанию, не было в вопросе), этот метод не работал.

Кроме того, результатом является строка, а не pathlib. p.parent / (p.stem + '.aln') даст вам новый путь.

А вот как это работает:

Метод splitext отделяет имя от расширения, создавая кортеж:

созданный кортеж теперь содержит строки "name" и "fasta". Затем вам нужно получить доступ только к строке «имя», которая является первым элементом кортежа:

А затем вы хотите добавить к этому имени новое расширение:

Как упомянул AnaPana, pathlib является более новым и простым в python 3.4, и есть новый метод with_suffix, который может легко справиться с этой проблемой:

Использование pathlib и сохранение полного пути:

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

Некоторая информация относится к предварительной версии продукта, которая может быть существенно изменена до ее выпуска. Microsoft не дает никаких явных или подразумеваемых гарантий в отношении представленной здесь информации.

Изменяет расширение строки пути.

Параметры

Информация о пути для изменения.

Новое расширение (с начальной точкой или без нее). Укажите значение null, чтобы удалить существующее расширение из пути .

Возврат

Информация об измененном пути.

На настольных платформах на базе Windows, если путь имеет значение null или пустую строку (""), информация о пути возвращается без изменений. Если расширение равно null , возвращаемая строка содержит указанный путь с удаленным расширением. Если путь не имеет расширения и расширение не равно null , возвращаемая строка пути содержит расширение, добавленное к концу пути.

Исключения

Примеры

В следующем примере показано использование метода ChangeExtension.

Примечания

Если ни путь, ни расширение не содержат точки (.), ChangeExtension добавляет точку.

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

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

Если путь не имеет расширения и расширение не равно null , возвращаемая строка содержит путь, за которым следует расширение .

Если расширение не равно null и не содержит ведущей точки, точка добавляется.

Если путь содержит несколько расширений, разделенных несколькими точками, возвращаемая строка содержит содержимое пути, в котором последняя точка и все символы, следующие за ней, заменены на расширение . Например, если путь "\Dir1\examples\pathtests.csx.txt" и расширение "cs", измененный путь будет "\Dir1\examples\pathtests.csx.cs".

Невозможно проверить, что возвращенные результаты действительны во всех сценариях. Например, если путь пуст, добавляется расширение.

Читайте также: