Move File Containing More Than two "-" at 3rd Line To New Directory


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Move File Containing More Than two "-" at 3rd Line To New Directory
# 43  
Old 05-17-2015
I don't think I have -t option on mv either

Code:
Processing list file: "../Syllable/list0H"
xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
mv: illegal option -- t
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory
Processing list file: "../Syllable/list10H"
mv: illegal option -- t
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory
Processing list file: "../Syllable/list11H"
mv: illegal option -- t
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory
Processing list file: "../Syllable/list12H"
mv: illegal option -- t
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory
Processing list file: "../Syllable/list13H"
mv: illegal option -- t
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory
Processing list file: "../Syllable/list14H"
mv: illegal option -- t
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory
Processing list file: "../Syllable/list15H"
mv: illegal option -- t
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory
Processing list file: "../Syllable/list18H"
mv: illegal option -- t
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory
Processing list file: "../Syllable/list1H"
xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
Processing list file: "../Syllable/list2H"
xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
mv: illegal option -- t
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory
Processing list file: "../Syllable/list3H"
xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
mv: illegal option -- t
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory
Processing list file: "../Syllable/list4H"
xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
mv: illegal option -- t
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory
Processing list file: "../Syllable/list5H"
xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
mv: illegal option -- t
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory
Processing list file: "../Syllable/list6H"
xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
mv: illegal option -- t
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory
Processing list file: "../Syllable/list7H"
xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
mv: illegal option -- t
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory
Processing list file: "../Syllable/list8H"
xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
mv: illegal option -- t
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory
Processing list file: "../Syllable/list9H"
mv: illegal option -- t
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory
Untitleds-MacBook-Pro:Dict Nexeu$

Maybe I could just use this command to replace first ' at 'filename.txt' with mv /Users/Nexeu/Documents/Dict/. That will replace all first ' expect first line of the file-content.

Code:
sed -i 's/txt\'/n\'/mv \/Users\/Nexeu\/Documents\/Dict\//g' 0H
sed -i 's/txt\'/n\'/mv \/Users\/Nexeu\/Documents\/Dict\//g' 1H
sed -i 's/txt\'/n\'/mv \/Users\/Nexeu\/Documents\/Dict\//g' 2H
sed -i 's/txt\'/n\'/mv \/Users\/Nexeu\/Documents\/Dict\//g' 3H
sed -i 's/txt\'/n\'/mv \/Users\/Nexeu\/Documents\/Dict\//g' 4H
sed -i 's/txt\'/n\'/mv \/Users\/Nexeu\/Documents\/Dict\//g' 5H
sed -i 's/txt\'/n\'/mv \/Users\/Nexeu\/Documents\/Dict\//g' 6H
sed -i 's/txt\'/n\'/mv \/Users\/Nexeu\/Documents\/Dict\//g' 7H
sed -i 's/txt\'/n\'/mv \/Users\/Nexeu\/Documents\/Dict\//g' 8H
sed -i 's/txt\'/n\'/mv \/Users\/Nexeu\/Documents\/Dict\//g' 9H
sed -i 's/txt\'/n\'/mv \/Users\/Nexeu\/Documents\/Dict\//g' 10H
....

Then I will replace the ' from .txt' with respective folder directory so it will go where it should and execute it.
# 44  
Old 05-17-2015
OK. So you aren't using a Linux system, and you aren't using a BSD system, and you aren't using OS X. What operating system are you using? Show us the output from the commands:
Code:
uname -a
type awk find rm sed xargs

You can't run sed with a directory as an input file. And if you use those sed commands on the list files, you'll destroy the list files.

The only reason xargs should complain about mismatched quotes would be if some of your filenames contained single quotes. If you still have the list files produced by my script, please run the following script and show us the output:
Code:
#!/bin/ksh
cd /Users/Nexeu/Documents/Syllable
awk -v sq="'" 'gsub(sq, sq, $0) != 2{print "File:" FILENAME " Line:" FNR ": " $0}' list*H

If you don't still have the list files, please rerun the script I provided in post #40 in this thread to recreate the list files and then run the script above.

I'll look for your response to this this afternoon. I have other things I need to do for the next three or four hours...
This User Gave Thanks to Don Cragun For This Post:
# 45  
Old 05-18-2015
Code:
OS X Yosemite
Version 10.10.3

MacBook Pro (Retina, 13-inch, Late 2013)
Processor 2.8 GHz Intel Core i7
Memory 16 GB 1600 MHz DDR3
Graphics Intel Iris 1536 MB

I've installed these using brew. Updated them 4 days ago. Some of them are suppose to be GNU Smilie

Code:
/usr/local/Cellar/autoconf
/usr/local/Cellar/automake
/usr/local/Cellar/bash
/usr/local/Cellar/binutils
/usr/local/Cellar/cloog
/usr/local/Cellar/coreutils
/usr/local/Cellar/diffutils
/usr/local/Cellar/ed
/usr/local/Cellar/emacs
/usr/local/Cellar/file-formula
/usr/local/Cellar/findutils
/usr/local/Cellar/gawk
/usr/local/Cellar/gcc
/usr/local/Cellar/gdb
/usr/local/Cellar/gdbm
/usr/local/Cellar/gettext
/usr/local/Cellar/git
/usr/local/Cellar/gmp
/usr/local/Cellar/gnu-indent
/usr/local/Cellar/gnu-sed
/usr/local/Cellar/gnu-tar
/usr/local/Cellar/gnu-which
/usr/local/Cellar/gnutls
/usr/local/Cellar/gpatch
/usr/local/Cellar/grep
/usr/local/Cellar/gzip
/usr/local/Cellar/isl
/usr/local/Cellar/less
/usr/local/Cellar/libmpc
/usr/local/Cellar/libtasn1
/usr/local/Cellar/libtorrent
/usr/local/Cellar/lzip
/usr/local/Cellar/m4
/usr/local/Cellar/make
/usr/local/Cellar/mpfr
/usr/local/Cellar/nano
/usr/local/Cellar/ncurses
/usr/local/Cellar/nettle
/usr/local/Cellar/openssh
/usr/local/Cellar/openssl
/usr/local/Cellar/pcre
/usr/local/Cellar/pkg-config
/usr/local/Cellar/python
/usr/local/Cellar/readline
/usr/local/Cellar/rsync
/usr/local/Cellar/rtorrent
/usr/local/Cellar/screen
/usr/local/Cellar/sqlite
/usr/local/Cellar/subversion
/usr/local/Cellar/unzip
/usr/local/Cellar/vim
/usr/local/Cellar/watch
/usr/local/Cellar/wdiff
/usr/local/Cellar/wget
/usr/local/Cellar/xz
/usr/local/Cellar/youtube-dl
/usr/local/Cellar/zsh

And this is what I get executing the command for info

Code:
Untitleds-MacBook-Pro:~ Nexeu$ uname -a
Darwin Untitleds-MacBook-Pro.local 14.3.0 Darwin Kernel Version 14.3.0: Mon Mar 23 11:59:05 PDT 2015; root:xnu-2782.20.48~5/RELEASE_X86_64 x86_64
Untitleds-MacBook-Pro:~ Nexeu$ type awk find rm sed xargs
awk is /usr/local/bin/awk
find is /usr/local/bin/find
rm is /bin/rm
sed is /usr/local/bin/sed
xargs is /usr/local/bin/xargs
Untitleds-MacBook-Pro:~ Nexeu$

And seems like I have a few single quoted files also Smilie

Code:
File:list8H Line:7: 'accordatura's.txt'
File:list8H Line:9: 'accordaturas'.txt'
File:list8H Line:11: 'accordature's.txt'
File:list8H Line:47: 'capelli+d'angelo.txt'
File:list8H Line:49: 'capelli-d'angelo.txt'
File:list8H Line:170: 'lactovarian's.txt'
File:list8H Line:172: 'lactovarians'.txt'
File:list8H Line:240: 'paleoencephalon's.txt'
File:list8H Line:243: 'paleogeology's.txt'
Untitleds-MacBook-Pro:Syllable Nexeu$

Should I rename these files and try executing the command again?
# 46  
Old 05-18-2015
Assuming you don' t have any tab characters in your filenames, this should work for you. I added a function to process filenames before giving them to xargs to appropriately quote the single-quotes you have in some of your files. I modified the both awk scripts to use tab as the field separator instead of single-quote in the parsed target directory pathname and the source filename between the awk scripts. And, the script now sets $PATH to avoid the non-standard xargs utility that was causing some of your problems.
Code:
#!/bin/ksh
# USAGE: mvhyphen
# DESCRIPTION:
#	This script depends on having two variables defined:
#	SRCDIR:	Absolute pathname of directory containing files to be
#		processed.  Results are unspecified in there are any
#		subdirectories in this directory.
#	DESTDIR:Destination base directory.  This can be an absolute
#		pathname or a pathname relative to $SRCDIR.  (whichever
#		of these is shorter is preferred.)

#	This script moves to $SRCDIR and processes files with names
#	ending with ".txt".  Files with names containing a space are
#	ignored.  The 3rd line of each file is read.  If that line does
#	not match the pattern '^[[].*[]]', the file is also ignored.
#	Otherwise, the number of hyphens between the '[' and the first
#	comma or ']' after that are counted.  For each unique count
#	value, a list file is created in $DESTDIR named "listNH" where
#	"N" is the count value.  After the lists have been created,
#	files in each list will be moved from $SRCDIR to $DESTDIR/"N"H.
#	$DESTDIR and $DESTDIR/*H will be created if they are not already
#	present.

#	This script is OS X specific.  It is tuned to work within the
#	number of files awk can have open at once (stdin, stdout, and 17
#	more files) and uses the non-standard xargs -J option.  This
#	script whould be able to handle up to 33 different values for
#	the number of hyphens found in the 1st word in the 3rd line in
#	the files being processed.

# Initialize variables...
DESTDIR=../Syllable
PATH=/bin:/usr/bin	# Avoid non-standard utilities.
SRCDIR=/Users/Nexeu/Documents/Dict

# Move to source directory and process the files found there...
cd "$SRCDIR" || exit 1
mkdir -p "$DESTDIR" || exit 2
find . -name '*.txt' ! -name '* *' |
awk -v sq="'" -v dest="$DESTDIR" '
# qmod(filename)
#	Modify single-quotes in filename to a mix of double-quotes and
#	single-quotes that xargs will treat as the original filename.
#	Print a note showing the name change and return the modified
#	name.
function qmod(namein,	nameout) {
	nameout = namein
	if(gsub(sq, sq "\""sq"\"" sq, nameout))
		printf("awk1: Quoted filename %s converted to %s\n",
			sq namein sq, sq nameout sq)
	return nameout
}
{	# Open and read the 1st three lines of the file named on the input line.
	f = substr($0, 3)	# Discard the leading "./" from find.
	getline x < f
	getline x < f
	rc = getline x < f
	close(f)		# Close the file.
	if(rc != 1) {
		printf("Cannot read 3 lines from file: %s\n", f)
		next
	}
	if(x !~ /^[[].*[]]/) {
		printf("File line 3 bad format: %s\n", f)
		next
	}
	sub(/[],].*/, "", x)	# Discard all but 1st word...
	nh = gsub(/-/, "", x)	# count hyphens remaining on the line.
	if(!(nh in flist)) {
		# Add to the list of known counts.
		flist[nh] = sprintf("%s/list%dH", dest, nh)
		fd[nh] = ++nfd
	}
	if(fd[nh] <= 16) {
		# Write this filename directly to the appropriate list file.
		print sq qmod(f) sq > flist[nh]
	} else {# Write the list file filename and this filename to stdout
		# to be processed by the 2nd awk in the pipeline...
		print "\t" flist[nh] "\t" f "\t"
	}
}' | \
# The following awk script interprets lines of the form:
#	"\tlistfile_filename\tfile_to_be_move_filename\t"
# (without the double quotes) as a request to add the 2nd filename to
# the list of files in the 1st filename.  Other lines are copied
# directly to stdout assuming that they are diagnostics from the
# previous awk script.  If more than 17 different listfile pathnames are
# found in the input, lines for those listfiles will also be copied to
# stdout (so another copy of this script can be used to create upto 17
# more listfiles without running the find and the 1st awk again.
awk -F '\t' -v sq="'" -v pat='^\t[^\t]*\t[^\t]*\t$' '
function qmod(namein,	nameout) {
	nameout = namein
	if(gsub(sq, sq "\""sq"\"" sq, nameout))
		printf("awk2: Quoted filename %s converted to %s\n",
			sq namein sq, sq nameout sq)
	return nameout
}
$0 ~ pat { # Process listfile data lines...
	if(!($2 in flist) && nfd++ < 17) {
		# Add to known file list file array.
		flist[$2]
	}
	if($2 in flist) {
		print sq qmod($3) sq > $2
		next
	}
	print "Too many list files to process..."
}
1'

# Now that all of the list files have been created, create the destination
# directories and move the files included in the list files into them.
for listpath in "$DESTDIR"/list*H
do	dirpath="${listpath%%list*}${listpath##*list}"
	printf 'Processing list file: "%s"\n' "$listpath"
	mkdir -p "$dirpath"
	xargs -J '#' mv '#' "$dirpath" < "$listpath" && rm "$listpath"
#	xargs -J '#' -t mv '#' "$dirpath" < "$listpath" && rm "$listpath"
done


Last edited by Don Cragun; 05-18-2015 at 04:30 AM.. Reason: Add the missing code to remove the list files after they have been successfully processed.
This User Gave Thanks to Don Cragun For This Post:
# 47  
Old 05-18-2015
Code:
File line 3 bad format: κ.txt
File line 3 bad format: μci.txt
File line 3 bad format: μg.txt
File line 3 bad format: μm.txt
Processing list file: "../Syllable/list0H"
Processing list file: "../Syllable/list10H"
Processing list file: "../Syllable/list11H"
Processing list file: "../Syllable/list12H"
Processing list file: "../Syllable/list13H"
Processing list file: "../Syllable/list14H"
Processing list file: "../Syllable/list15H"
Processing list file: "../Syllable/list18H"
Processing list file: "../Syllable/list1H"
Processing list file: "../Syllable/list2H"
Processing list file: "../Syllable/list3H"
Processing list file: "../Syllable/list4H"
Processing list file: "../Syllable/list5H"
Processing list file: "../Syllable/list6H"
Processing list file: "../Syllable/list7H"
Processing list file: "../Syllable/list8H"
Processing list file: "../Syllable/list9H"
Untitleds-MacBook-Pro:~ Nexeu$

OMG IT WORKS! THANK YOU SO MUCH! I can never thank you enough. It's finally done after so many months. I really owe you Don. Smilie
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. AIX

Apache 2.4 directory cannot display "Last modified" "Size" "Description"

Hi 2 all, i have had AIX 7.2 :/# /usr/IBMAHS/bin/apachectl -v Server version: Apache/2.4.12 (Unix) Server built: May 25 2015 04:58:27 :/#:/# /usr/IBMAHS/bin/apachectl -M Loaded Modules: core_module (static) so_module (static) http_module (static) mpm_worker_module (static) ... (3 Replies)
Discussion started by: penchev
3 Replies

2. Shell Programming and Scripting

Bash script - Print an ascii file using specific font "Latin Modern Mono 12" "regular" "9"

Hello. System : opensuse leap 42.3 I have a bash script that build a text file. I would like the last command doing : print_cmd -o page-left=43 -o page-right=22 -o page-top=28 -o page-bottom=43 -o font=LatinModernMono12:regular:9 some_file.txt where : print_cmd ::= some printing... (1 Reply)
Discussion started by: jcdole
1 Replies

3. Shell Programming and Scripting

Failure: if grep "$Var" "$line" inside while read line loop

Hi everybody, I am new at Unix/Bourne shell scripting and with my youngest experiences, I will not become very old with it :o My code: #!/bin/sh set -e set -u export IFS= optl="Optl" LOCSTORCLI="/opt/lsi/storcli/storcli" ($LOCSTORCLI /c0 /vall show | grep RAID | cut -d " "... (5 Replies)
Discussion started by: Subsonic66
5 Replies

4. Shell Programming and Scripting

Move a line containg "char" above line containing "xchar"

Okay, so I have a rather large text file and will have to process many more and this will save me hours of work. I'm not very good at scripting, so bear with me please. Working on Linux RHEL I've been able to filter and edit and clean up using sed, but I have a problem with moving lines. ... (9 Replies)
Discussion started by: rex007can
9 Replies

5. UNIX for Dummies Questions & Answers

Using "mailx" command to read "to" and "cc" email addreses from input file

How to use "mailx" command to do e-mail reading the input file containing email address, where column 1 has name and column 2 containing “To” e-mail address and column 3 contains “cc” e-mail address to include with same email. Sample input file, email.txt Below is an sample code where... (2 Replies)
Discussion started by: asjaiswal
2 Replies

6. Shell Programming and Scripting

Find lines with "A" then change "E" to "X" same line

I have a bunch of random character lines like ABCEDFG. I want to find all lines with "A" and then change any "E" to "X" in the same line. ALL lines with "A" will have an "X" somewhere in it. I have tried sed awk and vi editor. I get close, not quite there. I know someone has already solved this... (10 Replies)
Discussion started by: nightwatchrenba
10 Replies

7. UNIX for Dummies Questions & Answers

look for file size greater than "0" of specific pattern and move those to another directory

Hi , i have some files of specific pattern ...i need to look for files which are having size greater than zero and move those files to another directory.. Ex... abc_0702, abc_0709, abc_782 abc_1234 ...etc need to find out which is having the size >0 and move those to target directory..... (7 Replies)
Discussion started by: dssyadav
7 Replies

8. UNIX for Dummies Questions & Answers

script works well but displays " line 6: =: No such file or directory"

strange :) can you tell why?:cool: #!/bin/bash echo " enter your age " read age if ; then echo " you do not have to pay tax " elif ]; then echo " you are eligible for income tax " else echo " you dont have to pay tax " fi (3 Replies)
Discussion started by: me.
3 Replies

9. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

10. UNIX for Dummies Questions & Answers

Explain the line "mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'`"

Hi Friends, Can any of you explain me about the below line of code? mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'` Im not able to understand, what exactly it is doing :confused: Any help would be useful for me. Lokesha (4 Replies)
Discussion started by: Lokesha
4 Replies
Login or Register to Ask a Question