From ed4a116492d1f9af6fd9ccdbf32b4bd8bb61a488 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E9=9B=AF=E9=9D=99?= Date: Sat, 25 May 2024 20:58:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=91=BD=E4=BB=A4cp=20mv?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20240524cp mv.md" | 368 ++++++++++++++++++ 1 file changed, 368 insertions(+) create mode 100644 "53 \347\216\213\351\233\257\351\235\231/20240524cp mv.md" diff --git "a/53 \347\216\213\351\233\257\351\235\231/20240524cp mv.md" "b/53 \347\216\213\351\233\257\351\235\231/20240524cp mv.md" new file mode 100644 index 0000000..59f95c8 --- /dev/null +++ "b/53 \347\216\213\351\233\257\351\235\231/20240524cp mv.md" @@ -0,0 +1,368 @@ + + + + +## **cp**:复制文件或目录 + +```java +# 1. 复制单个文件: +cp 源文件名 目标文件名 # 将源文件复制一份为目标文件 + +# 2. 复制文件到目录: +cp 要复制的文件名 要复制到的文件夹路径 + +#3. 递归复制目录: + +# 复制目录时使用 `-r` 或 `-R` 选项可以递归地复制目录及其内容。 + +cp -r 源目录 目标目录 + +#4. 交互式复制:# 会确认覆盖信息 #使用 `-i` 选项,在覆盖已存在的文件前会提示用户确认。 cp -i 源文件 目标文件 # 复制源文件为目标文件,如果目标文件已经存在,会底部是否覆盖 + +# 例如:将c1.txt复制成c2.txt时,发现c2.txt已存在 + +$ cp -i c1.txt c2.txt cp: 是否覆盖 'c2.txt'? # 要覆盖就输入y,如果是n是取消复制 + +#5. 保留文件属性:原封不动的复制 + +# 使用 `-p` 选项可以保留原文件的属性(如时间戳、权限等)。 + +cp -p 源文件 目标文件 + +# 例如:将c1.txt复制成c3.txt,并保留c1.txt的文件属性 + +$ cp -p c1.txt c3.txt + +#6. 显示复制进度: + +# 使用 `-v` 选项可以显示详细的复制进度信息。类似的有tar rm + +cp -rv 源目录 目标目录 # 会在递归复制的时候显示进度信息 ``` #7. 仅当源文件较新时复制**: + +# 使用 `-u` 选项可以仅当源文件比目标文件新时才进行复制。 + +cp 1班成绩.txt 1班成绩.txt.bak # 直接覆盖 cp -u 1班成绩.txt 1班成绩.txt.bak # 更新才复制 + +#8. 强制复制: + +# 使用 `-f` 或 `--force` 选项可以强制复制,即使目标文件已存在也不提示,直接覆盖。 + +cp -f old_file new_file + +#9. 批量复制文件: + +# 可以使用通配符(如 `*`)来批量复制文件。 + +cp *.txt 笔记/ + +# 这将复制当前目录下所有 `.txt` 结尾的文件到 `笔记` 目录。 + +#10 同时复制多个文件或目录到 某个目录 cp 1.txt 2.txt 3.txt 笔记 # 一次性同时将1、2、3.txt都复制到笔记目录 cp -R dir1 dir2 dir3 # 同时将dir1,dir2复制到dir3内,因为是复制目录,要加-R cp -R 1.txt dir1 dir2 # 同时将文件和目录一起复制到dir2 + +#11 复制时产生备份文件,尾标~ cp -b a.txt tmp/ # 如果/tmp目录已经有a.txt 就会将原来的a.txt备份成a.txt~ + +#12 指定备份文件尾标 cp -b -S _bak a.txt /tmp # 如果/tmp目录已经有a.txt 就会将原来的a.txt备份成a.txt_bak #使用 cp -b -S _bak a.txt /tmp 命令,当目标目录 /tmp 中已经存在 a.txt 文件时,会先将其重命名为 a.txt_bak 作为备份,然后再将新的 a.txt 文件复制到目标目录。这可以有效地防止文件被覆盖,确保数据的安全性 + +``` + +## **mv**:移动文件或目录,也可用于重命名文件或目录。 + +```java + - 移动文件或目录:`mv 源目录/文件 目标目录` ,相当于剪切 + - 重命名文件或目录:`mv 原文件名 新文件名` + + 在 Linux 中,`mv` 命令用于移动文件或目录,或者对它们进行重命名。以下是 `mv` 命令的一些常见用法: + + 1. **移动文件或目录**: + + +```bash +# 将文件从移动到指定目录: +mv 文件 目标目录 +# 将源目录A移动到目标目录B +mv 目录A 目录B + +#注意:如果目标目录不存在,`mv` 命令会将其视为要重命名的文件名 +``` + +2. **重命名文件或目录**: + +```bash +# 重命名文件: +mv 旧文件名 新文件名 + +# 重命名目录 +mv 旧目录名 新目录名 + +#注意,如果新文件名已存在,就会被覆盖,如果新目录名已经存在,就变成了移动 +``` + +3. **移动并重命名:** + +```bash +# 移动一个文件到新目录,并重命名这个文件。 +mv 1.txt /tmp/2.txt # 移动当前目录下的1.txt到/tmp目录,并重命名为2.txt + +# 移动了一个目录到另一个目录下,并重命名 +mv aDir /tmp/bDir # 将当前目录下的aDir目录移动到/tmp目录下,将改名为bDir +``` + + 4. **移动多个文件**: + - mv 跟了3个参数时,最后一个默认是目录 + +```bash +# 同时移动多个文件到指定目标 +mv 1.txt 2.txt /tmp # 将1.txt和2.txt 移动到/tmp目录下 +# 同时移动多个目录到指定目录下 +mv aaa bbb /tmp # 将aaa和bbb 移动到/tmp目录下 + +# 使用通配符(如 `*`)来匹配多个文件或目录,并将它们移动到目标目录。 +mv *.txt /tmp # 移动当前目录下所有.txt结尾的文件和目录到/tmp目录下 +mv a* /tmp # 移动当前目录下,所有a开头的文件和目录到 /tmp目录下 +mv * /tmp # 移动当前目录下的,所有文件和目录到/tmp目录下 +``` + +5. **交互式操作**: + +```bash +# 使用 `-i` 选项,`mv` 命令会在移动或重命名文件前进行确认,以避免意外覆盖文件。 +mv -i 1.txt 2.txt # 当2.txt文件已经存在时,系统会提示你是否要覆盖。y 确认,n 取消 +``` + +6. **显示详细信息**: + +```bash +# 使用 `-v` 选项,`mv` 命令会显示详细的操作信息,包括移动或重命名的文件名。 +mv -v 1.txt 2.txt # 重命名1.txt为2.txt并显示详情 +renamed '1.txt' -> '2.txt' # 显示详细 + +``` + +7. **覆盖文件前先备份**: +* 使用 `-b` 选项,`mv` 命令会在覆盖文件之前对其进行备份。 + +```bash +mv -b 1.txt 2.txt # 如果2.txt已存在,就先备份2.txt为2.txt~,再次1.txt改成为2.txt +``` + +## 9. **touch**:`touch` 命令主要用于创建新文件和更新文件时间戳。 + +```bash +#1. 创建一个空文件 +touch filename #如果 filename 不存在,touch 会创建一个新的空文件。 + +#2. 更新文件的时间戳 +touch filename +#如果 filename 已经存在,touch 会更新该文件的访问和修改时间为当前时间。 + +#3.创建多个空文件 +touch file1 file2 file3 #touch 可以同时创建多个空文件 +``` + +相关和目录可自行创建后再操作 + +1. 在家目录下建立文件exam.c,将文件exam.c拷贝到/tmp这个目录下,并改名为 shiyan.c + + ```java + + root@hecs-336440:/home/524# mkdir tmp + root@hecs-336440:/home/524# sudo touch exam.c + root@hecs-336440:/home/524# sudo cp exam.c tmp/shiyan.c + ``` + +2. 在任何目录下回到用户主目录? + +```java +cd /home +``` + +3. 用长格式列出/tmp/test目录下所有的文件包括隐藏文件? + + ```java + root@hecs-336440:/home/524# cd tmp/ + root@hecs-336440:/home/524/tmp# sudo mkdir test + root@hecs-336440:/home/524/tmp# cd ./test/ + root@hecs-336440:/home/524/tmp/test# ls -al + total 8 + drwxr-xr-x 2 root root 4096 May 25 19:38 . + drwxr-xr-x 3 root root 4096 May 25 19:38 .. + + + + ``` + +``` + + + +4. /tmp/test2目录下,创建5个文件分别是 1.txt 2.txt 3.txt 4.txt 5.txt,压缩这5个文件,压缩包的名字是hailiang.tar + + + +```java +root@hecs-336440:/home/524/tmp/test# cd ../ +root@hecs-336440:/home/524/tmp# sudo mkdir test2 +root@hecs-336440:/home/524/tmp# cd test2 +root@hecs-336440:/home/524/tmp/test2# touch 1.txt 2.txt 3.txt 4.txt 5.txt +root@hecs-336440:/home/524/tmp/test2# sudo tar -czvf hailiang.tar 1.txt 2.txt 3.txt 4.txt 5.txt + +``` + +5. 当前目录,建立文件 file1.txt 并更名为 file2.txt? + + ```java + root@hecs-336440:/home/524/tmp/test2# sudo touch file1.txt + root@hecs-336440:/home/524/tmp/test2# sudo mv file1.txt file2.txt + + ``` + +6. 当前目录,用vim建立文件bbbb.txt 并将用户名的加入其中保存退出? + + ```java + root@hecs-336440:/home/524/tmp/test2# vim bbbb.txt + i + wwj + ~ + ~ + ~ + esc + :wq + ``` + +7. 将家目录中扩展名为txt、doc和bak的文件全部复制到/tmp/test目录中? + + ```java + root@hecs-336440:/home# sudo cp ./*/*.txt ./*/*.doc ./*/*.bac ./tmp/test + + + ``` + +``` + + + + + +``` + + + +8. 将文件file1.txt从当前目录移动到家目录的/docs中。 + +```java +root@hecs-336440:/home/524# sudo mkdir docs +root@hecs-336440:/home/524# sudo touch file1.txt +root@hecs-336440:/home/524# sudo mv file1.txt /home/524/docs/ + + + +9. 复制文件file2.txt从当前目录到家目录/backup中。 + +```java +root@hecs-336440:/home/524# sudo mkdir backup +root@hecs-336440:/home/524/tmp/test2# cp file2.txt /home/524/backup/ +``` + +10. 将家目录/docs中的所有文件和子目录移动到家目录/archive中。 + + ```java + root@hecs-336440:/home/524# sudo mkdir archive + root@hecs-336440:/home/524# sudo mv ./docs/* ./archive/ + + ``` + +11. 复制家目录/photos及其所有内容到家目录/backup中。 + + ```java + root@hecs-336440:/home/524# sudo mkdir photos + root@hecs-336440:/home/524/photos# sudo cp * /home/524/backup/ + + ``` + + + +12. 将文件家目录/docs/report.doc移动到家目录/papers中,并将其重命名为final_report.doc。 + + ```java + root@hecs-336440:/home/524/docs# sudo touch report.doc + root@hecs-336440:/home/524# sudo mkdir papers + root@hecs-336440:/home/524/docs# sudo mv report.doc /home/524/papers/final_report.doc + + + ``` + + ``` + + ``` + + ``` + +13. 在家目录/docs中创建一个名为notes.txt的空文件,并将其复制到目录家目录/backup中。 + + ```java + root@hecs-336440:/home/524/docs# sudo touch notes.txt + root@hecs-336440:/home/524/docs# sudo cp notes.txt /home/524/backup/ + + ``` + +14. 复制家目录/images中所有以.jpg结尾的文件到家目录/photos中。 + + ```java + root@hecs-336440:/home/524# sudo mkdir images + root@hecs-336440:/home/524/images# cp *.jpg /home/524/backup/ + + ``` + +15. 将文件家目录/docs/file1.txt和家目录/docs/file2.txt复制到家目录/backup中。 + + ```java + + root@hecs-336440:/home/524/docs# cp file1.txt file2.txt /home/524/backup/ + + ``` + +16. 将家目录/docs中的所有.txt文件复制到家目录/text_files中。 + + ```java + root@hecs-336440:/home/524/docs# cp *.txt /home/524/text_files/ + + ``` + +17. 将家目录/docs中的所有文件移动到家目录/temp中,并且如果文件已存在,则覆盖它们。 + + ```java + root@hecs-336440:/home/524/docs# sudo mv * /home/524/tmp/ + ``` + +18. 将家目录/docs中的所有文件移动到家目录/archive中,并且在移动时显示详细的移动信息。 + + ```java + root@hecs-336440:/home/524/docs# sudo mv -v * /home/524/archive/ + ``` + +19. 复制家目录/docs中的所有子目录及其内容到家目录/backup中。 + + ```java + root@hecs-336440:/home/524/docs# sudo cp * /home/524/backup/ + ``` + +20. 将家目录/docs中的所有文件和子目录移动到家目录/backup中,但排除文件名以"temp_"开头的文件。 + + ```java + root@hecs-336440:/home/524/docs# sudo cp !(temp_*) /home/524/backup/ + ``` + +21. 将目录/docs/report.txt移动到家目录/archive中,但如果目标目录中已存在同名文件,则不直接覆盖,先备份同名文件为report.txt_bak。 + + ```java + root@hecs-336440:/home/524/docs# sudo mv -bS _bak report.txt archive + ``` + +22. 将家目录/docs中所有以.pdf结尾的文件复制到家目录/pdf_files中,并且如果目标目录中已存在同名文件,则忽略它们。 + + ```java + root@hecs-336440:/home/524# sudo mkdir pdf_files + root@hecs-336440:/home/524/docs# cp -f *.pdf /home/524/pdf_files + ``` + + -- Gitee